【发布时间】:2021-08-07 13:21:57
【问题描述】:
我的单元测试代码和 SonarQube 遇到了一点问题。
我有以下简单的测试:
[TestMethod]
public void TestFormat_Null()
{
_sut.Format(null);
}
public void Format(IPhone phoneNumber)
{
if (phoneNumber == null) return;
FormatNumber(phoneNumber);
FormatAreaCode(phoneNumber);
FormatCountryCode(phoneNumber);
}
这里的要求是,如果传入 null,则该方法将什么也不做,因为没有任何要格式化的内容,也不会因异常而崩溃。
现在我们遇到的问题是我们的 SonarQube 抱怨,这是一个没有任何断言的测试。
有没有更好的方法来声明一个测试一个不做任何事情的方法的测试,或者在这种情况下应该简单地忽略 SonarQube 警告?
【问题讨论】:
-
Format()中是否有您可以测试的副作用?或者您检查调用_sut.Format(null)不会引发异常... -
@mu88 没有副作用。我只想测试代码不会引发异常。 AFAIK MSTestV2(我们使用的框架)没有针对“DoesNotThrow”案例的明确断言。
-
你说得对,MSTest ootb 没有这样的功能——但其他框架有,比如Fluent Assertions——无论如何我强烈推荐你使用顶级断言框架????但是当然,即使使用 MSTest,您也可以引入布尔变量
hasFailed,将调用封装在try-catch中,将hasFailed = true设置在catch中,最后设置为Assert.IsFalse(hasFailed) -
@mu88 查看我发布的答案。这是我通过 FluentAssertions 确定的解决方案 :)
标签: c# unit-testing sonarqube mstest