首页 > 解决方案 > 正确测试一个方法在某些情况下什么都不做

问题描述

我的单元测试代码和 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 警告的情况?

标签: c#unit-testingsonarqubemstest

解决方案


我在 FluentAssertions 中找到了解决方案。

我的新代码将对 _sut 的旧调用包装在一个动作中,并使用 Fluent Assertions Should Not Throw 机制。

这是一个优雅的解决方案,因为我们已经在使用 FluentAssertions。我只是从来没有意识到它提供的“不应该扔”断言。直到现在我才知道应该扔。


推荐阅读