c# - 如何使用多个参数调用测试方法(NUnit)
问题描述
我的测试方法如下所示:
public static List<Something> Generator() {
return A.GenerateObjects();
}
[Test, TestCaseSource(nameof(Generator))]
public void DoSomething(Something abc) {/*do something*/}
此代码运行良好,并为列表中的每个对象生成一个单位案例。
我想在方法中包含另一个参数,例如:
public void DoSomething(Something abc, string def)
我已经用这些线试过了,但没有用:
public static object[] Case =
{
new object[]
{
A.GenerateObjects(),
someStrings
}
};
也许使用循环函数迭代列表而不是直接调用方法 (GenerateObjects())?我也不明白 Nunit 如何仅使用 TestCaseSource(nameof(Generator)) 直接从列表中识别对象
提前致谢!
解决方案
您可以像这样返回 TestCaseData 的 IEnumerable:
public static IEnumerable<TestCaseData> Generator()
{
yield return new TestCaseData(new Something { SomeValue = "Hi" }, "Foo").SetName("FirstTest");
yield return new TestCaseData(new Something { SomeValue = "Bye" }, "Bar").SetName("SecondTest");
}
[Test]
[TestCaseSource(nameof(Generator))]
public void DoSomething(Something abc, string def)
{
Console.WriteLine($"{abc.SomeValue},{def}");
}
SetName 是可选的,如果您想要一个比它组成的默认名称更有意义的名称。
我也不明白 Nunit 如何仅使用 TestCaseSource(nameof(Generator)) 直接从列表中识别对象
Nunit 注意到测试方法上的 TestCaseSource 属性,然后使用反射调用“生成器”方法。(Nameof 只是糖,编译器在构建时将其替换为实际名称)。返回的每个 TestCaseData 对象都是另一个测试用例。在我上面的示例中,测试将运行两次。FirstTest 将有一个 SomeValue 设置为 Hi 和 Foo 的 def 字符串的 Something 实例。SecondTest 将有一个SomeValue 设置为Bye 的Something 实例和一个Bar 的def 字符串。
推荐阅读
- stored-procedures - Informix SQL 11.5 创建没有临时表的存储过程
- javascript - 如何获取唯一标识符以识别 Outlook 中的约会(约会组织者模式)
- javascript - 如何使用 javascript 显示用户电子邮件 ID?
- ios - 运行 Flutter Driver 测试时如何禁用推送通知提示
- isabelle - 元在伊莎贝尔的所有介绍
- cookies - TYPO3 扩展“Cookies”在接受后重定向时忽略 GET 变量
- amazon-s3 - 使无法下载音频文件
- html - 如何在角度模板而不是css文件中添加背景图像
- javascript - ReferenceError:未定义“消息”
- laravel - 在“with”函数中为 Laravel Eloquent 关系添加参数