在Nunit中,如何添加与另一个测试的所有参数一起运行的测试



我有一个参数化测试,该测试测试了某个逻辑。Nunit TestCaseAttribute捕获了几个测试用例。

现在,我希望利用完全相同的参数来测试略有不同的逻辑。

我意识到我可以通过其他属性-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.
}

它有一些问题。

那么,我的问题是 - 是否有一种使用测试方法x的参数运行测试方法y的方法,其中后者使用 TestCaseAttribute提供参数?

我使用nunit 3.7.1

实际答案很短。重用参数的Nunit方法是TestCaseSourceAttribute。: - (

我想我会解释您的解决方案为什么不起作用。

在Nunit 3 中,诸如TestCaseTestCaseSource之类的属性不仅是数据容器。他们实现了Nunit调用的接口,以便将特定测试的属性运行。

您的代码正在处理TestCaseAttribute,就好像它只是一个数据存储的参数一样。但是该属性实际上有些事情,其中一些与TestCaseSourceAttribute不同。

从您的代码中,我可以看到您自己弄清楚了一部分。您的第一个方法依赖于属性将双重转换为十进制,而第二个方法将参数视为双重。当然,这种差异是因为您不能对属性有小数的论点。

不幸的是,要进行完整的解决方案,您必须重复或为两个属性之间的其他差异提供津贴,这都是由于属性参数上的限制C#c#位置。IMO,这是不值得的。创建一个静态的测试castedata项目并将其用于两种方法是微不足道的。如果您使方法起作用(这是可能的(,那么唯一的优势将是它的聪明。: - (

最新更新