PHPUnit、模拟接口和实例

2022-08-30 12:23:57

有时在我的代码中,我会检查特定对象是否实现了接口:

if ($instance instanceof Interface) {};

但是,在PHPUnit中创建所述接口的模拟,我似乎无法通过该测试。

 // class name is Mock_Interface_431469d7, does not pass above check
 $instance = $this->getMock('Interface'); 

我知道有一个名为 Interface 的类与实现 Interface 的类不同,但我不确定如何处理这个问题。

我是否被迫模拟一个实现接口的具体类?这难道不会破坏使用接口实现可移植性的目的吗?

谢谢


答案 1

还有断言InstanceOf 从3.5.0开始

例:

$this->assertInstanceOf('\Models\User', $this->userService->findById(1));

答案 2

这对我有用:

$mock = $this->getMock('TestInterface');
$this->assertTrue($mock instanceof TestInterface);

也许是错别字,也许是$instance不是你想象的那样?


推荐