Phpunit,一个测试 - 一种方法?

Phpunit, one test - one method?

一个测试一定要覆盖一个方法吗?例如:

class Testme()
{
    public function testMe ($a)
    {
        if ($a == 1)
        {
            throw new Exception ('YAY');
        }
        else
        {
            return true;
        }
    }
}

不过可能不是 "real" 问题。它可以通过以下方式进行测试:

/**
 * @expectedException Exception
 */
public function test1()
{
    new Testme()->testMe (1)
}

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

但它可以放在一个方法中(在这种情况下,测试异常有点困难)。什么是好方法?一个方法必须在一个测试方法中,还是一个方法在甚至4个独立测试方法中测试都可以吗?

与其考虑 class 的 tests/method,您应该将其视为针对 class 预期行为的一项测试。在你的例子中,你有两件不同的事情应该发生

  1. 如果参数为1,则抛出异常
  2. return 其他值也是如此

所以你需要这两个测试,因为应该发生两种不同的事情。

您的测试有助于指定您的代码应该DO,而不是您的代码应该是什么样子。一个方法可能会导致不同的事情发生,这取决于它是 运行.

的参数撤消