nUnit Assert.Throws TestCase attribute



我有一个这样的测试方法:

[TestCase(16486, "BobBank2.site16486.1", "16486.1")]
[TestCase(16441, "BobBank2.site16441.1", "16441.1")]
[TestCase(16443, "BobBank2.site16443.1", "16443.1")]
public async Task CheckUserAccountLinkStatusTest(int providerId, string username, string userKey)

我需要确保第一种情况(16486(总是抛出错误。是否可以修改测试用例属性来执行此操作?

你可以

检查

if(providerId==16486)
{
    Assert.Throws(...
}

但最好有两个单独的测试,一个在预期时检查异常,另一个在不应该有异常时断言没有异常。

虽然 @Connel.O'Donnell 解决方案有效,但我建议:

  1. 避免在单元测试中使用条件逻辑。
    • 通过在单元测试中使用 if 语句,更容易出现错误。
    • 使用逻辑分支来阅读和维护测试更加困难。
    • 以下是堆栈溢出主题:为什么要在单元测试中避免条件逻辑以及如何避免?
  2. 将引发异常的测试
  3. 与未引发异常的测试分开。

因此,用于断言异常的新单独测试应或多或少如下所示:

[TestCase(16486, "BobBank2.site16486.1", "16486.1")]
public async Task CheckUserAccountLinkStatusTest_ThrowsException(int providerId, string username, string userKey)
{
    // ...
    Assert.That(() => { /* ... */  }, Throws.Exception);
}

最新更新