PHPUnit,一个测试-一个方法?

3
必须一个测试用例只覆盖一个方法吗?例如:
class Testme()
{
    public function testMe ($a)
    {
        if ($a == 1)
        {
            throw new Exception ('YAY');
        }
        else
        {
            return true;
        }
    }
}

也许这不是一个“真正”的问题。可以通过以下方式进行测试:
/**
 * @expectedException Exception
 */
public function test1()
{
    new Testme()->testMe (1)
}

public function test2()
{
    $this->assertTrue (new Testme()->testMe (2));
}

但是它可以被放入一个方法中(在这种情况下,测试异常有点困难)。什么是好的方式?一个方法必须在一个测试方法中,或者将一个方法分别测试在4个独立的测试方法中也可以吗?


4
单元测试的整个意义在于隔离地测试单元/方法,以消除任何依赖......因此,在单个单元测试中测试多个方法会破坏这个原则......这并不排除对单个方法运行多个测试,以测试该方法中代码的不同路径;通常应独立测试异常情况。 - Mark Baker
1个回答

3
与其考虑类的测试/方法,您应该将其视为每个预期行为的一个测试。在您的示例中,有两件不同的事情应该发生:
1. 如果参数为一,则抛出异常 2. 对于其他值返回true 因此,您需要两个测试,因为有两件不同的事情应该发生。
您的测试有助于指定您的代码应该做什么,而不是您的代码应该看起来像什么。一个方法可能会导致不同的事情发生,具体取决于运行它的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接