【问题标题】:Auto injecting dependencies for unit testing为单元测试自动注入依赖项
【发布时间】:2018-01-11 16:59:29
【问题描述】:

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

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

class ServiceClass {

  private $daoClass;

  public function methodToTest(){}
}

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

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

在 java 中,我们可以使用@InjectMocks 注释或MockitoAnnotations.initMocks 方法轻松地做到这一点而无需反射。

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

另外,一个不同但相关的问题是,在我的测试中有什么方法可以创建私有属性并用一些标签对其进行注释,然后它会自动转换为模拟对象实例?就像 Java 中的 mockito 是如何做到的 @Mock 注释。

【问题讨论】:

标签: java php unit-testing mocking phpunit


【解决方案1】:

我不知道自己有任何模拟注释(请参阅第一条评论以获取此类链接),但为了您的测试目的,您可以为您使用的纯 PHP 中的此类服务类创建自己的模拟测试。这是相当直接的,只需要为开发正确配置自动加载。这样做的好处是您的库附带了合适的模拟,否则您将在生产代码中混入仅为测试而设计但传播到非测试上下文中的注释。

这可能不是您从 Java 来时所要寻找的,但我在 PHP 中使用这种“手写”测试助手获得了很好的经验,尤其是在涉及某些类家族时。最后,它们非常有用,可以在测试中避免大量重复。有时它们甚至是必要的,因为动态创建的模拟无法表达和断言测试中可能需要什么。

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2021-06-19
    • 1970-01-01
    • 2017-04-01
    • 2020-06-15
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多