ZF2:如何在测试期间重置ServiceManager

时间:2014-08-27 02:40:51

标签: php zend-framework2 phpunit service-locator

我的服务管理器是在我的测试引导程序中设置的,我怀疑这是一种非常标准的方式,如下所示:

    $serviceManager = new ServiceManager(new ServiceManagerConfig());
    $serviceManager->setService('ApplicationConfig', $config);
    $serviceManager->get('ModuleManager')->loadModules();
    static::$serviceManager = $serviceManager;

在我的单元测试的基类中,我正在访问和配置服务管理器,如下所示:

    $this->sm = Test\Bootstrap::getServiceManager();
    $this->sm->setAllowOverride(true);

在我的个人测试中,我使用$serviceManager->setService('MyService', $myMock)覆盖了使用模拟的服务。

这很好,除了我必须记住取消设置每个模拟服务(我目前使用$serviceManager->setService('MyService', null)进行操作,否则测试会相互干扰。

在每次测试运行后,有没有更简单的方法将服务管理器重置为自举状态?我可以在测试基类的setUp()中放置一长串服务并重置每个服务,但是当添加新服务并且不更新基类时,这可能会导致问题。我想在每次测试之前克隆服务管理器,但这可能会有问题(由于克隆很浅)。

当然,我可以在基本测试用例的setUp()中引导服务管理器,但这似乎是很多处理开销。

有什么想法吗?对等可以成为解决方案的一部分吗?

1 个答案:

答案 0 :(得分:2)

我会说使用setUp()来设置一个新的ServiceManager实例的新测试,而其他新配置正是应该如何完成的。