我在此提出了一个具体问题:
phpunit error when testing an implementation with injected dependencies
然而,我不知道我现在面临的问题是否是结构和设计问题,而不是编码问题。因此,我想在此提出一个更一般性的问题:
我正在使用Laravel,我编写了一个接口,然后编写了一个支持它的类。然后,我使用服务提供者将接口绑定到实现类,并注入所需的依赖项,这恰好是一个雄辩的模型。
我的问题是:我该如何测试这门课?目前,我正在调用接口上的方法。因此,这会调用服务提供者来解析实现(而不是接口),并为我注入一个模型(需要工厂构建或模拟)。这让我觉得测试太多了(在触及目标方法之前,测试服务提供者和模型)。我应该直接测试实现吗?
发布于 2015-08-07 13:15:28
没错--只要直接测试实现,如果可以的话,就可以完全绕过IoC容器。
可以这样想--将代码编写到接口中,这样就可以将功能交换出去(例如,MySQL数据库驱动程序转换为PostgreSQl驱动程序)。因此,必须对类的每个单独实现进行测试。您不应该依赖于IoC容器绑定来测试给定的实现,因为它非常依赖于配置。
在我看来,在测试期间,唯一可以依靠IoC容器解决问题的方法是,如果被解决的是您正在测试的事物的依赖关系,那么:
即使这样,您也可以手动注入依赖项,以确保代码环境的一致性。IoC容器只是帮助深入创建任何依赖关系,而不必担心测试中的所有依赖。
*考虑使用“现在”日期(并且确定一个人的年龄,比如说),而不能够在测试期间指定使用什么作为“现在”日期--您必须在测试期间重新实现您的年龄计算代码,以便计算出年龄,以确保您编写的代码输出正确的年龄,这对实际测试您的代码几乎没有什么作用!
https://stackoverflow.com/questions/31877424
复制相似问题