c# - 正确测试一个方法在某些情况下什么都不做
问题描述
我的单元测试代码和 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 警告的情况?
解决方案
我在 FluentAssertions 中找到了解决方案。
我的新代码将对 _sut 的旧调用包装在一个动作中,并使用 Fluent Assertions Should Not Throw 机制。
这是一个优雅的解决方案,因为我们已经在使用 FluentAssertions。我只是从来没有意识到它提供的“不应该扔”断言。直到现在我才知道应该扔。
推荐阅读
- javascript - 如何访问按钮提交的自声明属性?
- python - dict len 的意外行为
- linux - 为什么我们的密码破解工具不起作用
- assembly - 如何在 NASM 中创建内联字符串的地址
- c++ - C++链表合并使用multimap
- symfony - 如何根据连接条件过滤查询生成器的结果?
- statistics - 如果直接影响微不足道,那么在结构方程建模中显着的间接影响意味着什么?
- node.js - 开始测试后无法在非测试(产品)代码中设置和命中断点(VS 代码 + TypeScript_
- qt - Qt Designer - 为什么调整 LCD 数字大小时数字会被推到左边?
- actions-on-google - 如何阻止 Google 助理回答用于我的 Google 操作的 Intent