自动注入单元测试的依赖项

时间:2017-08-03 21:59:39

标签: java php unit-testing mocking phpunit

来自Java背景,我正在开发php代码库,并希望为我的代码添加单元测试。

我有一个服务类,其DAO类如下:

class ServiceClass {

  private $daoClass;

  public function methodToTest(){}
}

我没有提供构造函数,也没有为daoClass属性添加setter方法。这是因为它将使用PHP-DI IoC容器注入。

对于单元测试,我正在使用phpunit,所以我正在模拟daoClass对象并使用反射直接注入该属性(因为该属性没有构造函数或setter)。

在java中,我们可以使用@InjectMocks注释或MockitoAnnotations.initMocks方法轻松完成此操作。

我无法在phpunit中找到类似的方法。

另外,一个不同但相关的问题,在我的测试中是否有任何方法我可以创建一个私有属性并用一些标记注释它,它会自动转换为模拟对象实例?就像Java中的mockito那样@Mock注释。

1 个答案:

答案 0 :(得分:0)

我不了解任何模拟注释(请参阅第一条注释以获取此类链接),但为了您的测试目的,您可以使用纯PHP创建自己的类似服务类的模拟用于测试。这是相当直接的,只需要正确配置自动加载以进行开发。这样做的好处是,您的库附带了合适的模拟,否则您将混合到生产代码中,注释仅为测试而设计,但会扩散到非测试环境中。

这可能不是你从Java那里寻找的那个,但是我已经在PHP中用这样的"手写的"测试助手,特别是涉及到一些班级时。最后它们非常有用,可以在测试中保证大量重复。有时它们甚至是必要的,因为动态创建的模拟不能表达和断言测试中可能需要的内容。