2010-09-15 106 views
1

我有以下工厂类,它有一个依赖项$ client。我将依赖关系移至工厂类,因为它首次出现在Service_Service1类中,因此我可以测试服务类。但是,我如何测试工厂类?PHPUnit:测试一个具有依赖关系的工厂类

class Factory implements Service 
{ 

    public static function factory($service) 
    { 
     $config = Zend_Registry::get('config'); 

     switch ($service) { 
      case Service::Service1: 
       $client = new Zend_Soap_Client(
        $config->url, 
        array(
         'encoding' => 'UTF-8' 
        ) 
       ); 
       $pickupPoint = new Service_Service1($client); 
       break; 
     } 
    } 
} 

回答

4

我不知道问题是什么,但如果它是如何存根硬编码的依赖性,具有通过PHPUnit的笔者一起来看看这篇文章:

你最好的办法是注入这些类的实例,而不是硬编码它们。作为替代方案,您可以在Factory中创建其类名称属性,以便您可以交换实例化的内容。

+0

我只是在寻找一个解决方案如何将工厂类更改为可测试而无需硬编码依赖关系,所以thanx! – tom 2010-09-15 17:25:44

+0

是否有可能将'php-test-helpers/php-test-helpers'作为Windows DLL的PHP​​扩展?我尝试了'php_uopz.dll',但是我无法得到'uopz_overload(ZEND_NEW,function(){});'以任何方式工作。另外,我无法找到关于如何进行单元测试工厂的其他建议:-( – 2016-11-24 16:39:28

+1

@PhilippGächter不知道,我现在还不确定测试助手是否仍然支持。 – Gordon 2016-11-25 12:29:32