phpunit:在功能测试的类中添加方法

时间:2019-08-13 12:39:16

标签: php testing mocking phpunit stub

我正在Symfony 4.3项目中使用PHPUnit执行功能测试。我所有的测试类都来自TestCase。

我在存根调用外部服务的方法的结果时遇到问题。我不想在我的项目功能测试中检查此服务是否正常工作,所以请执行以下操作:

public function testPutEndpoint()
{
    $stub = $this->createMock(ExternalRepository::class);
    $stub->method('put')->willReturn(['data'=> ['data']]);

    {
        list($responseCode, $content) = $this->makeCurl(
           //Here a curl to the endpoint of my project is done
        );

        $this->assertEquals(200, $responseCode);
    }

在这里,我看到代码如何继续抛出真正的方法而忽略了子代码。

所以我的问题是,如何对逻辑内的方法进行测试,但不能在测试类中直接调用它?

此外,端点的构造函数将注入存储库作为注入:

protected $externalRepository;

public function __construct(ExternalRepository $externalRepository)
{
    $this->externalRepository = $externalRepository;
    $this->commandBus = $commandBus;
}

1 个答案:

答案 0 :(得分:0)

目前,我发现对控制器进行功能测试的最佳解决方案是:

  1. 模拟外部存储库类,并存入put方法。
  2. 创建一个Controller对象并注入存根
  3. 通过测试请求调用控制器
  4. 断言控制器的返回值符合预期

    ['1', '+', '2']