![](/img/trans.png)
[英]How to pass auto wired dependencies as mock while unit testing a class which has constructors with arguments
[英]Auto injecting dependencies for unit testing
来自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
注释。
我不知道任何模拟的注释(请参阅第一个注释以获取此类链接),但是出于测试目的,您可以在测试中使用的普通PHP中为此类服务类创建自己的模拟。 这是相当直接的,只需要正确配置自动加载以进行开发。 这样做的好处是,您的库附带了合适的模拟,否则您将混合到生产代码中,注释仅为测试而设计,但会扩展到非测试环境中。
这可能不是你从Java那里寻找的那个,但是我已经在PHP中用这样的“手写”测试助手做了很好的经验,特别是当涉及到一些类的时候。 最后它们非常有用,可以在测试中保证大量重复。 有时它们甚至是必要的,因为动态创建的模拟无法表达和断言测试中可能需要的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.