我有一个简单的问题,我想在我的测试用例中使用
DateTime
作为变量。
我这样使用它:
[Theory]
[InlineData(Constants.valid_string, Constants.valid_string, DateTime.Now)] //DateTime.Now is producing an error
public void MappingSuccessAppIDTest(
string? appID,
string? shortID,
DateTime? date
)
{
//Arrange
ApplicationID modelName = new()
{
application_id = appID,
short_id = shortID,
created_date = date,
};
//Act
ApplicationIDValidator validator = new();
FluentValidation.Results.ValidationResult result = validator.TestValidate(modelName);
//Assert
Assert.True(result.IsValid);
}
但是我收到此编译器错误:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
但我不能这样做作为解决方法:
public const string valid_date = DateTime.Now.ToString();
因为
DateTime
不是 C# 语言中的本机类型,并且 const
只能在本机类型上创建。
如何将我的
date
添加到 inlineData
中?
现在对于单元测试来说是一个糟糕的选择,因为每次运行测试时它都会改变。有关单元测试中处理时间的讨论,请参阅this。但假设你有固定的时间想要测试
[Theory]
[InlineData(Constants.valid_string, Constants.valid_string, "2023-02-01T12:23:34Z")]
public void MappingSuccessAppIDTest(
string? appID,
string? shortID,
sting? dateString
)
{
//Arrange
ApplicationID modelName = new()
{
application_id = appID,
short_id = shortID,
created_date = DateTime.Parse(dateString),
};
//Act
ApplicationIDValidator validator = new();
FluentValidation.Results.ValidationResult result = validator.TestValidate(modelName);
//Assert
Assert.True(result.IsValid);
}