Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php IoC容器+;单元测试_Php_Unit Testing_Oop_Ioc Container - Fatal编程技术网

Php IoC容器+;单元测试

Php IoC容器+;单元测试,php,unit-testing,oop,ioc-container,Php,Unit Testing,Oop,Ioc Container,使用容器创建要测试的对象可以吗?或者我应该手动建造它们吗?是的,这很好,可以防止小猫被杀。请记住,IoC容器有三个用途: 对象组合 生命周期管理 拦截 如果您需要这三项中的任何一项,为什么不让为工作构建的工具来为您完成它呢?是和否 您当然可以使用一个,但不必这样做(容器非常适合组成复杂的系统,但在单元测试中,这些复杂性不应该出现) 你为什么要考虑呢?用手擀同样的东西会很乏味(总是这样),还是会很困难?如果是后者,那么你就是在问题上贴管道胶带。无论哪种方式都能为你提供最准确(最接近真实用例)但最轻

使用容器创建要测试的对象可以吗?或者我应该手动建造它们吗?

是的,这很好,可以防止小猫被杀。请记住,IoC容器有三个用途:

  • 对象组合
  • 生命周期管理
  • 拦截
  • 如果您需要这三项中的任何一项,为什么不让为工作构建的工具来为您完成它呢?

    是和否

    您当然可以使用一个,但不必这样做(容器非常适合组成复杂的系统,但在单元测试中,这些复杂性不应该出现)


    你为什么要考虑呢?用手擀同样的东西会很乏味(总是这样),还是会很困难?如果是后者,那么你就是在问题上贴管道胶带。

    无论哪种方式都能为你提供最准确(最接近真实用例)但最轻(没有任何依赖性)的待测试单元实例。如果你聪明地构建了你的类——大部分不是这样做的——你应该能够在没有依赖关系的情况下实例化它们,因此测试应该很简单。如果您想一次对一组类运行测试(看看它们是如何协同工作的……我不知道是否有很多类这样做),那么也许一个工厂(一个封装实例化的设计模式)和一些存根或驱动程序就可以做到这一点


    因此,是的,不是“容器”本身,而是潜在的其他模式或类别,您指定的唯一责任是重新创建理想的测试环境。

    不,这并不难,但问题出现了,我想知道是否有类似“测试时决不使用容器”的规则,或者“如果对象将在真实应用程序中使用容器创建,那么它们应该在测试中使用容器创建”,感谢您的回答,尽管我仍然不知道这是否是一种不好的做法。我知道我不该这么做,但无论如何……听起来你应该没事;它总是关于控制事情。关于国际奥委会/国际奥委会走得更远的言论,请查看以下回复:以及