如何在PHP单元测试中模拟构造函数中调用的方法?

我在单元测试一个具有在构造函数中调用的方法的类时遇到了麻烦.我不明白如何嘲笑这个.也许我应该使用phpUnit的’setUp’方法?

我正在使用Mockery库.有没有比这更好的工具?

class ToTest
{

   function __construct() {

       $this->methodToMock(); // need to mock that for future tests 

   }

   // my methods class

}

任何建议,将不胜感激.

最佳答案
如果你的类很难实例化来测试,那就是你的类做得太多或者在构造函数中工作的代码味道.

http://misko.hevery.com/code-reviewers-guide/

Flaw #1: Constructor does Real Work

警示标志

>构造函数或字段声明中的新关键字
>构造函数或字段声明中的静态方法调用
>除了构造函数中的字段赋值之外的任何内容
>构造函数完成后对象未完全初始化(观察
out for initialize methods)
>在构造函数中控制流(条件或循环逻辑)
>代码在构造函数中执行复杂的对象图构造
而不是使用工厂或建筑商
>添加或使用初始化块

无论你的methodToMock函数在你的构造函数中做什么都需要重新考虑.正如其他答案中所提到的,您可能希望使用依赖注入来传递您的类正在执行的操作.

重新思考你的课实际做了什么,并重构,以便更容易测试.这样做的好处是可以让您的类在以后更容易重用和修改.

转载注明原文:如何在PHP单元测试中模拟构造函数中调用的方法? - 代码日志