DateTime 在 xUnit 理论中用作 InlineData

问题描述 投票:0回答:1

我有一个简单的问题,我想在我的测试用例中使用

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
中?

c# unit-testing attributes xunit
1个回答
0
投票

现在对于单元测试来说是一个糟糕的选择,因为每次运行测试时它都会改变。有关单元测试中处理时间的讨论,请参阅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);
}
© www.soinside.com 2019 - 2024. All rights reserved.