嘲讽界面与嘲讽?

Mocking interface with mockery?

提问人:user3419148 提问时间:11/11/2014 更新时间:1/20/2021 访问量:4787

问:

我正在尝试为测试中的某些接口创建一个模拟模拟。

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

我正确地检查并发现 Mockery CAN&DOES 找到并加载我的界面(通过在 mockery 类中添加一些回声)

嘲讽真的没有声明模拟类实现了它请求的接口吗? 这岂不是完全绕过了TTD的良好做法吗?

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

希望收到您的来信。

php phpunit 嘲讽

评论

0赞 gontrollez 11/11/2014
你能在模拟句子之前检查 interface_exists('My\\Cool\\Interface') 的结果吗?

答:

1赞 user3419148 11/20/2014 #1

回答我自己的问题:是的,嘲弄在实现接口的模拟对象方面没有适当的工作。

对我而言,这种嘲弄对于适当的测试驱动开发毫无用处。:-(

评论

0赞 Bit-Man 6/27/2019
界面模拟确实有效。请看一下@4ekistik对类似问题的回应 stackoverflow.com/a/39545249/1085978
0赞 Kaleba KB Keitshokile 3/17/2023
只是嘲笑interace?
3赞 honzalilak 3/19/2015 #2

有一段时间,我认为模拟界面也不适合我,但最终我发现了一个错别字,导致模拟不起作用。

目前,模拟界面对我有用。

下面是一个示例。

示例接口

interface Convertor
{

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

}

在 phpunit test 中创建模拟

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

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

评论

0赞 emul 9/4/2019
我认为是在谈论这种情况时:你不能用 Mockery 制作 Mock 来测试这个函数class A implements I {} function tested(A $a) { if ($a instanceof I) { // do something } }