我使用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(测试验证器类的一个)中测试的。
答案 0 :(得分:-1)
有很多函数不会修改状态,只是根据输入返回一个值。验证是一种类型,转换是另一种类型。
对这些功能进行单元测试非常有意义,因为它们包含您不想破坏的重要逻辑。我认为“许多开发者”在这里是错误的。