【发布时间】:2016-12-20 14:53:17
【问题描述】:
有没有方法模拟方法和返回值取决于方法参数?我需要这个来模拟容器并获得服务。我尝试这样做:
$container = $this
->getMockBuilder(Container::class)
->getMock();
$container
->expects($this->any())
->method('get')
->with('logger')
->willReturn($this->loggerMock)//this is logger object
;
$container->expects($this->any())
->method('get')
->with('database')
->will($this->returnValue(self::$pdo));//database object
$this->dataProviderFactory = new DataProviderFactory($container);
当我调用它时: print_r($container->get('logger'));应该有 Logger 对象。
但这不起作用。我收到以下错误:
方法名称的期望失败等于调用零次或多次时失败
Parameter 0 for invocation Symfony\Component\DependencyInjection\Container::get('logger', 1) does not match expected value.
Failed asserting that two strings are equal.
Expected :'database'
Actual :'logger'
【问题讨论】:
-
这与你的问题无关,但你确定你的工厂需要依赖整个容器吗?只注入它需要的服务可能会更好,比如记录器和数据库连接。它使测试更容易一些。
-
现在我不能按照您建议的方式执行此操作,因为我开发的应用程序结构原因
标签: php unit-testing symfony