【发布时间】:2015-06-10 13:11:34
【问题描述】:
我正在使用 PHPUnit 测试服务。
我正在使用setUp() 创建我的服务接受的依赖项的模拟对象,如下所示:
public function setUp()
{
$this->fooManagerMock = $this->getFooManagerMock();
$this->barManagerMock = $this->getBarManagerMock();
$this->treeManagerMock = $this->getTreeManagerMock();
$this->loggerMock = $this->getLoggerMock();
$this->myService = new MyService($this->fooManagerMock, $this->barManagerMock, $this->treeManagerMock, $this->loggerMock);
}
Bundle\Tests\Service\MyTest::testServiceWithValidData
/**
* @dataProvider getServiceValidCaseData
*/
public function testServiceWithValidData($case)
{
$this->assertTrue($this->myService->serve($fooArray));
}
事实证明,在我的serve() 函数中,我有这样的实体管理器:
return $this->fooManager->find($fooId) !== null;
在这种情况下,$this->fooManager 是 Mock_FooManager_4038382a 的实例,整个测试失败。
欢迎提出任何建议。
更新
/**
* @return \PHPUnit_Framework_MockObject_MockBuilder
*/
private function getFooManagerMock()
{
return $this->getMockBuilder(
'\MyBundle\Entity\Manager\FooManager'
)->disableOriginalConstructor()->getMock();
}
@matteo 的示例
我期待$fooManager->find($id) 向我返回一个特定的 Foo 实例,例如:
\MyBundle\Manager\FooManager{
"id" : 234234,
"status" : "pending".
"color" : "yellow",
"tree" : [
"id" : 2345,
"height" :160
]
}
【问题讨论】:
-
能否提供
getFooManagerMock方法的代码? -
从提供的详细信息中不清楚您的问题是什么。 “整个测试失败”是如何表现出来的?您的模拟 FooManager 是否提供了 find() 的实现,该实现在传递 $fooId 时返回合理的内容?
-
@Matteo 我刚刚更新了我的初始帖子。 @redbirdo 我的 FooManager 包含一个
find($id) method,其中包含:return $this->getRepository()->find($id);希望有所帮助。
标签: php unit-testing symfony phpunit