使用Single作为断言是一种不好的做法吗?

本文关键字:一种 Single 断言 使用 | 更新日期: 2023-09-27 18:12:19

我正在测试一个操作集合的方法。给定一组参数,它应该只包含一个符合条件的元素。编辑:集合中可能还有其他不符合条件的元素

我使用Single来测试该行为,它工作得很好,因为如果根本没有匹配或多个匹配,它将通过抛出异常来失败测试。但是没有实际的断言,这在某种程度上违反了arrange, act, assert。所以我想知道这是不是一个不好的做法,是否有更好的方法来做到这一点。

下面的伪代码演示我的问题:

[TestMethod]
public void TestMethod()
{
    List list = MethodToTest(param1, param2);
    list.Single(s => s.Matches(condition));
    //No actual Assert
}

使用Single作为断言是一种不好的做法吗?

我想知道这是不是一个不好的做法,是否有更好的方法来做到这一点。

Yes and Yes .

如果没有匹配项或有多个匹配项,则抛出异常导致测试失败。

不要抛出异常而使测试失败。通过测试失败导致测试失败。您的测试框架具有一种机制,用于断言测试所测试的条件。您购买了这个测试框架,现在却拒绝使用它的特性。按照测试框架的设计使用它,或者,如果您不喜欢它,放弃它并选择您更喜欢的框架。但是不要绕过它的机制。

意外异常不一定是测试失败;它们可能是有bug的测试。你需要能够分辨出其中的区别。判断的方法是:如果异常起源于被测代码,那么它就是代码中的bug。如果它起源于测试代码,那么它就是测试中的错误。现在,您可以通过使测试代码抛出来检测被测代码中的错误。而且现在更难判断bug在哪里。不要让未来的自己想得那么难;不要编写故意避开测试平台惯例的令人惊讶的代码。