我的服务管理器是在我的测试引导程序中设置的,我怀疑这是一种非常标准的方式,如下所示:
$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()
中引导服务管理器,但这似乎是很多处理开销。
有什么想法吗?对等可以成为解决方案的一部分吗?
答案 0 :(得分:2)
我会说使用setUp()
来设置一个新的ServiceManager
实例的新测试,而其他新配置正是应该如何完成的。