【问题标题】:Mocking interface with mockery?用嘲讽来模拟界面?
【发布时间】:2015-01-07 22:02:36
【问题描述】:

我正在尝试为我的测试中的某些接口创建一个 mockery-mock。

但是模拟的结果是一个模拟对象,它不是接口的实例。例如。生成的模拟类没有“实现 MyInterface”。

我正确检查并发现 Mockery CAN&DOES 定位并加载我的界面(通过在 mockery 类中添加一些 echo)

mockery 确实没有声明一个 mocked-class 实现了它请求的接口吗? 这不是完全绕过了 TTD 的良好做法吗?

$mock = m::mock('My\\Cool\\Interface');
//now $mock is not aninstanceof My\Cool\Interface

希望收到您的来信。

【问题讨论】:

  • 你能在模拟语句之前检查 interface_exists('My\\Cool\\Interface') 的结果吗?

标签: php phpunit mockery


【解决方案1】:

有一段时间我认为模拟接口对我也不起作用,但最终我发现了一个导致模拟不起作用的错字。

目前模拟接口对我有用。

这是一个例子。

示例界面

interface Convertor
{

    /**
     * @return array
     */
    public function getIds();

}

在 phpunit 测试中创建模拟

    $convertor = Mockery::mock('Convertor');
    $convertor->shouldReceive('getIds')->andReturn([10, 20]);

你能发布不适合你的代码吗?

【讨论】:

  • 我认为是在谈论这种情况时:class A implements I {} function tested(A $a) { if ($a instanceof I) { // do something } } You can't make a Mock with Mockery to test this function
【解决方案2】:

回答我自己的问题:是的,模拟在为接口实现模拟对象方面做得不好。

对我来说,这种嘲讽对于正确的测试驱动开发毫无用处。 :-(

【讨论】:

猜你喜欢
  • 2019-05-28
  • 2017-11-20
  • 2019-06-12
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多