我有一个单元测试某个逻辑的参数化测试。有几个测试用例由NUnit TestCaseAttribute
捕获。在NUnit中如何添加一个测试与另一个测试的所有参数一起运行?
现在我想利用完全相同的参数来测试一个稍微不同的逻辑。
我意识到我可以通过不同的属性传递参数 - TestCaseSourceAttribute
并使用相同的来源进行多个单元测试。
但我想知道是否可以使用TestCaseAttribute
(我发现在这个特定的测试中更方便)并重新使用参数进行另一个测试?
我的解决方案包括反射:
[TestCase(Impl.SqlErrorCode.PartiallyDocumentedColumn, 1978.14, "MyTable", ChangeTypeCode.AddTable, "dbo.MyAuxTable:MyTableId")]
[TestCase(Impl.SqlErrorCode.UndocumentedColumn, 1978.15, "MyAuxTable", ChangeTypeCode.AddTable, "dbo.MyAuxTable:MyAuxTableId")]
[TestCase(Impl.SqlErrorCode.UndocumentedColumn, 1978.16, "MyTable", ChangeTypeCode.AddTable, "dbo.MyTable:MyAuxTableId")]
[TestCase(Impl.SqlErrorCode.NonExistingColumnInComments, 1969.19, "MyTable", ChangeTypeCode.None, "dbo.MyTable:Remarks")]
public async Task AddTableWithBadComments(Impl.SqlErrorCode expectedSqlErrorCode, decimal step, string tableName, int sqlErrorState, string expectedObjectName)
{
// ...
}
private static IEnumerable GetParametersOfAnotherTest(string testName)
{
var testCaseAttrs = typeof(IntegrationTests).GetMethod(testName).GetCustomAttributes<TestCaseAttribute>();
return testCaseAttrs.Select(a => a.Arguments);
}
[TestCaseSource(nameof(GetParametersOfAnotherTest), new object[] { nameof(AddTableWithBadComments) })]
public async Task AddTableWithBadCommentsNoVerify(Impl.SqlErrorCode expectedSqlErrorCode, double _step, string tableName, int sqlErrorState, string expectedObjectName)
{
// A different logic, but with the same parameters.
}
它有一些问题,但。
所以,我的问题是这样的 - 是否有NUnit方式来运行测试方法Y与测试方法X的参数,其中后者使用TestCaseAttribute
来提供参数?
我使用nunit 3.7.1