如何使用 TestCaseSource 将 c# 记录传递到 NUnit 测试中?

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

在这个使用 nunit v3.13.3 的示例中,我希望运行两个测试

[TestCaseSource(nameof(_cases))]
public void MethodInTestProject(RecordParameter recordParameter)
{
    Assert.Pass();
}

private static readonly object[] _cases = new object[]
{
    new object?[]
    {
        null,
    },
    new object?[]
    {
        new RecordParameter(Guid.NewGuid()),
    },
};

public record RecordParameter(Guid StoreId);

调试时,只有第一个案例被传递到 MethodInTestProject 中。在测试资源管理器中,我得到以下输出

 MethodInTestProject(RecordParameter { StoreId = 71cda514-3e76-4829-a244-1f39cd4a2532 })
   Source:MyTests.cs line 228

我还有其他在参数中传递类、值类型等而没有任何错误的例子。有没有特定的方法来传递 c# 记录?

c# parameters nunit record
1个回答
0
投票

您正在制作一个由对象数组组成的源。虽然 在技术上是允许的,这给 NUnit 在解释源代码时几乎没有要使用的类型信息。使第二级数组可为空会使事情进一步复杂化。该数组表示收集到的方法参数,不能为空。在您的情况下,您可以消除一个级别,因为该方法只需要一个参数。

但是,更好的方法是使用

TestCaseData
,NUnit 类旨在保存有关测试用例的信息。像这样的……

private static readonly TestCaseData[] _cases = new []
{
    new TestCaseData(null), // Assuming you want null passed to the method
    new TestCaseData(new RecordParameter(Guid.NewGuid()))
}
© www.soinside.com 2019 - 2024. All rights reserved.