PHPUnit:如何覆盖和测试依赖方法

时间:2012-06-13 17:53:39

标签: unit-testing phpunit

我正在尝试使用PHPUnit在类的方法Mail上编写测试。我正在测试的方法是saveMessage($ arguments)。 saveMessage除了保存之外,还可以调用类方法$this->emailMessage( $arguments )。我想编写一个测试saveMessage的测试,并测试正确调用emailMessage(使用正确的参数),但不调用实际的emailMessage方法。

我可以做的一种方法是继承Mail,并覆盖emailMessage方法。更有吸引力的方法是模拟Messages类,并覆盖emailMessage方法,同时测试模拟对象中的saveMessage方法。但是,那时我会测试Mocked对象本身;我已经读到这是一个坏主意,但在这种情况下我不完全确定原因。为此目的使用模拟对象是否安全?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为这属于"What to test and what not to test"类别。在不知道代码的情况下,这个问题难以回答。

例如为什么参数是正确的?他们被操纵了吗?您可以将操作代码放在自己的方法中并进行单元测试。

或者您可以在saveMessage方法中使用asserts,只需检查单元测试中没有触发断言错误。

据我所知,这个问题与代码的设计有关,也与测试代码有关。