提问人:user3419148 提问时间:11/11/2014 更新时间:1/20/2021 访问量:4787
嘲讽界面与嘲讽?
Mocking interface with mockery?
问:
我正在尝试为测试中的某些接口创建一个模拟模拟。
但模拟的结果是一个不是接口实例的模拟对象。例如,生成的模拟类不会“实现MyInterface”。
我正确地检查并发现 Mockery CAN&DOES 找到并加载我的界面(通过在 mockery 类中添加一些回声)
嘲讽真的没有声明模拟类实现了它请求的接口吗? 这岂不是完全绕过了TTD的良好做法吗?
$mock = m::mock('My\\Cool\\Interface');
//now $mock is not aninstanceof 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 } }
评论