【发布时间】:2012-06-13 17:53:39
【问题描述】:
我正在尝试使用 PHPUnit 对 Mail 类的方法编写测试。我正在测试的方法是 saveMessage($arguments)。 saveMessage,除了保存,还可以调用类方法$this->emailMessage( $arguments )。我想编写一个测试 saveMessage 的测试,并测试 emailMessage 是否被正确调用(使用正确的参数),但不调用实际的 emailMessage 方法。
我可以做到这一点的一种方法是将 Mail 子类化,并覆盖 emailMessage 方法。一种更吸引人的方法是模拟 Messages 类,并覆盖 emailMessage 方法,同时在模拟对象中测试 saveMessage 方法。但是,然后我将测试 Mocked 对象本身;我读过这是一个坏主意,但在这种情况下,我不完全确定为什么。为此目的使用模拟对象是否安全?有没有更好的方法来处理这个问题?
【问题讨论】:
-
我认为您最初的建议 - 创建 Mail 的测试器子类是最简单、最干净的方法。你有理由不想这样做吗?在您的测试中,声明一个初始化为 FALSE 的静态 I_got_here 变量,然后在您覆盖的 emailMessage 函数中,将 I_got_here 变量设置为 true,然后在您的测试中,您断言 I_got_here 为 true。同样,您可以将传递给您覆盖的 emailMessage 函数的参数传回。
标签: unit-testing phpunit