我有一個單元測試某個邏輯的參數化測試。有幾個測試用例由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