【问题标题】:Does ClassData in xUnit Test accept arguments? C#xUnit Test 中的 ClassData 是否接受参数? C#
【发布时间】:2020-07-29 06:21:56
【问题描述】:

我正在为我的应用程序编写单元测试。现在我正在使用 Theory 和 ClassData 来创建数据驱动的单元测试。 我想知道 ClassData 是否能够接受参数,以便我可以根据测试的输入更改测试数据?

下面是一些示例代码:

这是我的数据类:

public class InvalidMessageFrame : TheoryData<string, string, string>
{
    public InvalidMessageFrame(string messageType)
    {
        var testData = ReadFromJson(handlerType);

        foreach (var data in testData ?? Enumerable.Empty<InvalidMessageTestModel>())
        {
            Add(data.description, data.message, data.exception);
        }
    }
    
    private IEnumerable<InvalidMessageTestModel> ReadFromJson(string messageType)
    {
        var messageObjectName = messageType switch
        {
            "A" => "Group A",
            "B" => "Group B",
            "C" => "Group C",
            "D" => "Group D",
            _ => throw new ArgumentOutOfRangeException(nameof(messageType), messageType, null)
        };

        var filePath = Path.Combine(Environment.CurrentDirectory, "../../../TestData/InvalidTestData.json");
        var json = File.ReadAllText(filePath);
        var jObject = JObject.Parse(json);
        var testData = jObject[messageObjectName]?.ToObject<IEnumerable<InvalidMessageTestModel>>();

        return testData;
    }
}

这是我的测试:

    [Theory]
    [ClassData(typeof(InvalidMessageFrame("A")))]
    public void InvalidTest(string description, string message, string exception)
    {     
    }

如您所见,我试图让 Class Data 接受一个参数,以便我可以根据 Group ABCD 更改测试数据,因为在我的测试数据 json 文件中,该组中的每一个都是测试数据列表。但是,我的设置似乎不可能,因为该行的测试中显示错误[ClassData(typeof(InvalidMessageFrame("A")))],错误是:) expected

如果这不起作用,我想知道是否有其他方法可以达到相同的结果?

谢谢。

【问题讨论】:

    标签: c# xunit


    【解决方案1】:

    使用 typeof 你只能得到类的类型,而不是调用构造函数,所以你只能写

    [ClassData(typeof(InvalidMessageFrame))]
    

    你可以构建这样的东西 https://andrewlock.net/creating-a-custom-xunit-theory-test-dataattribute-to-load-data-from-json-files/

    【讨论】:

    • 我明白了,但是如果我不输入 typeof 我认为 ClassData 将无法正常工作?注意到我会阅读您提供的链接!
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多