如何使用PHPunit和Zend Framework 2测试服务
我已经完成了对控制器的测试,并模拟了服务中的方法。我现在想测试服务方法。我在网上搜索过,但没有找到好文章。如果有任何指针、链接等。。对于PHPunit测试服务,zend框架2中的测试是理想的 到目前为止,我已经尝试过:如何使用PHPunit和Zend Framework 2测试服务,php,unit-testing,zend-framework2,phpunit,Php,Unit Testing,Zend Framework2,Phpunit,我已经完成了对控制器的测试,并模拟了服务中的方法。我现在想测试服务方法。我在网上搜索过,但没有找到好文章。如果有任何指针、链接等。。对于PHPunit测试服务,zend框架2中的测试是理想的 到目前为止,我已经尝试过: public function testFindInternById() { $intern = new \Intern\Entity\InternEntity(); $intern->setId(123); $intern->setFirst
public function testFindInternById()
{
$intern = new \Intern\Entity\InternEntity();
$intern->setId(123);
$intern->setFirstName('David');
$intern->setLastName('Random');
$intern->setTertiaryInstitute('UCT');
$intern->setEducationalFeedback('educationalFeedback');
$intern->setStartDate('2015-05-01');
$intern->setEndDate('2015-05-02');
$intern->setEmail('david.random@effcomm.com');
$intern->setCv('4f7ae9d402168b5949cfda6deeee6620emir4.pdf');
$intern->setCvRating(0);
$intern->setProfilePicture('random.jpg');
$intern->setInternshipRole('QA');
$intern->setWebsite('www.random.com');
$intern->setContactNumber('(123)-213-3434');
$intern->setCurrentLocation('Mars');
$emMock = $this->getMock('EntityManager', array('getRepository', 'getClassMetadata', 'persist', 'flush', 'find'), array(), '', false);
$emMock->expects($this->any())
->method('find')
->will($this->returnValue($intern));
$internService = new \Intern\Service\Intern\InternService();
$internService->removeIntern($intern);
}
有些方法没有返回,所以我只是测试它们是否被访问,用代码覆盖率术语“我想看到绿色婴儿”。如果您有任何建议,我们将不胜感激 我只是想说,如果您有ZF2或任何其他框架或自定义代码,这并不重要。您不是在测试框架,而是在测试代码 假设你想测试你是否有能力解雇实习生。您的服务不需要依赖于存储库
$internId = 1;
$repositoryMock = $this->getMockBuilder('\RepositoryClass')->disableOriginalConstructor()->setMethods(array('findOnyById', 'delete'));
$repositoryMock->expects($this->once())->method('findOnyById')->with($internId)->willReturn($internMock);
$repositoryMock->expects($this->once())->method('delete')->with($internId);
$internMock = $this->getMockBuilder('\Intern\Entity\InternEntity')->disableOriginalConstructor()->getMock();
$internService = new \Intern\Service\Intern\InternService($repositoryMock);
$internService->removeIntern($internId);
唯一重要的是,您的服务使用预期参数调用所有必要的方法。
我认为这是一个好的方向