如何使用PHPunit和Zend Framework 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

我已经完成了对控制器的测试,并模拟了服务中的方法。我现在想测试服务方法。我在网上搜索过,但没有找到好文章。如果有任何指针、链接等。。对于PHPunit测试服务,zend框架2中的测试是理想的

到目前为止,我已经尝试过:

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);
唯一重要的是,您的服务使用预期参数调用所有必要的方法。 我认为这是一个好的方向