PHPunit:在模拟查询类型方法上调用预期总是不好的做法吗?

时间:2016-05-25 11:58:13

标签: php unit-testing phpunit

我使用PhpUnit对我的php代码进行单元测试。许多开发人员说,将期望放在查询方法上是不好的做法,即只返回一些东西并且不改变系统状态(CQS)的方法。期望应仅用于命令类型方法。例如:

$this->validatorMock->expects($this->once())
               ->method('isValid')
               ->with('foo')
               ->willReturn(true)

被认为是一种不好的做法,因为它将测试与实施紧密结合在一起。正确的方式:

$this->validatorMock->method('isValid')
     ->willReturn(true);

然而,如果我正在测试依赖于某种验证结果的类,例如:

if ($this->validator->isValid($data) {
         // some logic
} else {
     // some other logic
}                                    

我是否应该对该方法有所期待?它是一种查询类型方法,但测试它是否被调用很重要。我想知道数据已经过验证。

当然isValid方法本身是在单独的testClass(测试验证器类的一个)中测试的。

1 个答案:

答案 0 :(得分:-1)

有很多函数不会修改状态,只是根据输入返回一个值。验证是一种类型,转换是另一种类型。

对这些功能进行单元测试非常有意义,因为它们包含您不想破坏的重要逻辑。我认为“许多开发者”在这里是错误的。