chr*_*989 4 c# nunit unit-testing testcasesource
我正在尝试使用NUnit中的TestCaseSource运行多个测试。但是我想让[SetUp]在需要时运行。
目前,它可以按我希望的方式工作,但感觉并不“正确”。因此,以下是主要的测试用例代码(简化了):
public class ImportTestCases
{
ImportTestCases()
{
TestData.RunTestSetup();
}
public static IEnumerable TestCases
{
get
{
//run the funciton under test...
var results = RunFunctionSubjectToTest(TestData.ImportantVar);
//get multiple results...
var allProperties =new TestCaseData(o).Returns(true)
ExpandNestedProperties(results.AllProperties)
.ToList()
.ConvertAll(o => new TestCaseData(o).Returns(true));
return allProperties;
}
}
}
[TestFixture]
public class ImportTests
{
[TestFixtureSetUp]
public void ImporTestSetup()
{
TestData.RunTestSetup();
}
[Test, TestCaseSource(typeof(ImportTestCases), nameof(ImportTestCases.TestCases))]
public bool PropertyTest(UnitTestHelper.PropInfo info)
{
return info.DoTheyMatch;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是[SetUp]在ImportTestCases“ TestCases”属性“ get”运行之前没有运行。“ ImportTestCases”的构造函数也未运行。因此,为了确保在引用ImportVar之前已运行“ RunTestSetup”,我必须执行以下操作:
public static class TestData
{
private static bool HasSetUpRan = false;
private static int _importantVar;
public static int ImportantVar
{
get
{
if(!HasSetUpRan)
{
RunTestSetup();
}
return _importantVar;
}
}
public static void RunTestSetup()
{
if (HasSetUpRan)
{
return;
}
///do set up
//e.g. _importantVar = GenerateId();
//end
HasSetUpRan= true;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这确保在返回变量之前已运行“设置”。遗憾的是,这是迄今为止我设法使其正常工作的唯一方法。正如我所说,这是“错误的”并且过于复杂。也许我在这里过度使用了testCases?或者我应该使用某种形式的测试用例(可以吗?)。
我已经尝试简化上面的代码,如果对我要测试的内容根本没有意义,则在此道歉。
要点是在创建TestCaseSources之前是否有一个[Setup]运行?
要点是,测试用例将在加载测试时定位。因此,具有[TestFixtureSetUp]属性的例程将在调用“ TestCases ”属性后执行。但是,您可以在静态构造函数中执行一些设置例程。但是为了首先调用它,您需要将测试数据放在同一类中:
[TestFixture]
public class ImportTests
{
static ImportTests()
{
//Step 1
//run your set-up routine
}
//Step 3
[Test, TestCaseSource(nameof(ImportTests.TestCases))]
public bool PropertyTest(string s) => string.IsNullOrEmpty(s);
//Step 2
public static IEnumerable TestCases => new[] {new TestCaseData("").Returns(true)};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3172 次 |
| 最近记录: |