【问题标题】:How to test services with PHPunit and Zend Framework 2如何使用 PHPunit 和 Zend Framework 2 测试服务
【发布时间】:2015-07-26 01:31:21
【问题描述】:

我已经完成了我的控制器的测试,并模拟了服务中的方法。我现在想测试服务方法。我在网上搜索过,但没有找到好的文章。如果有任何用于 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);     
}

有些方法没有返回值,所以我只是测试它们是否被访问,用代码覆盖率术语“我想看到绿色婴儿”。所以你们任何提示将不胜感激。

【问题讨论】:

    标签: php unit-testing zend-framework2 phpunit


    【解决方案1】:

    我只是想提一下,您是否拥有 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);
    

    唯一重要的是您的服务使用预期的参数调用所有必要的方法。 我认为这是一个很好的方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2013-03-08
      • 2014-07-22
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多