我有以下方法生成一组测试用例!
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases(param1)
{
foreach (string entry in entries)
{
yield return callMyMethod(param1);
}
}
Run Code Online (Sandbox Code Playgroud)
如何将作为参数类型的param作为参数传递给我的PrepareTestCases()方法?
有没有办法做到以下几点:
[Test, Category("Integration"), TestCaseSource("PrepareTestCases", param1)]
public void TestRun(ResultsOfCallMyMethod testData)
{
// do something!
}
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 18
我已经在即将发布的最新版本的nunit中对此进行了更改(3.2).
https://github.com/nunit/nunit/blob/4f54fd7e86f659682e7a538dfe5abee0c33aa8b4/CHANGES.txt
- TestCaseSourceAttribute现在可选地获取可以传递给source方法的参数数组
现在可以做这样的事情
[Test, Category("Integration"), TestCaseSource(typeof(MyDataSources),"PrepareTestCases", new object[] {param1})]
public void TestRun(ResultsOfCallMyMethod testData)
{
// do something!
}
private class MyDataSources
{
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases(param1)
{
foreach (string entry in entries)
{
yield return callMyMethod(param1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*iuk 10
如果查看TestCaseSourceAttribute doc,您将看到没有任何方法可以将参数传递给返回测试用例的方法.
生成测试用例的方法应该是无参数的.
因此,假设您要避免代码重复,并且需要重用相同的方法来生成一些测试用例列表,我建议您执行以下操作:
写这实际上生成测试用例集参数化方法:
(PrepareTestCases()已经做那)
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases(string param)
{
foreach (string entry in entries)
{
yield return CallMyMethod(param);
}
}
Run Code Online (Sandbox Code Playgroud)编写无参数包装器,调用测试用例生成器并在那里传递所需的参数:
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases_Param1()
{
return PrepareTestCases("param1");
}
public IEnumerable<ResultsOfCallMyMethod> PrepareTestCases_Param2()
{
return PrepareTestCases("param2");
}
Run Code Online (Sandbox Code Playgroud)编写测试方法并将paremeterless包装器作为测试用例源传递:
[TestCaseSource("PrepareTestCases_Param1")]
public void TestRun1(ResultsOfCallMyMethod data)
{
}
[TestCaseSource("PrepareTestCases_Param2")]
public void TestRun2(ResultsOfCallMyMethod data)
{
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
23205 次 |
| 最近记录: |