Khi chế nhạo một giao diện trong PHPUnit, PhpStorm than phiền khi nó được sử dụng làm tham số cho một hàm kiểu gợi ý.Làm thế nào để ngăn chặn PhpStorm hiển thị cảnh báo ... Được mong đợi khi sử dụng mock PHPUnit?
Ví dụ
interface InterfaceA{
}
class ClassA{
public function foo(InterfaceA $foo){}
}
class PhpStormTest extends PHPUnit_Framework_TestCase
{
public function testFoo(){
$mock = $this->getMock("InterfaceA");
$a = new ClassA();
$a->foo($mock);
}
}
On $a->foo($mock);
PhpStorm nhấn mạnh $mock
với cảnh báo Expected InterfaceA, got PHPUnit_Framework_MockObject_MockObject
ảnh
Tôi đoán nó đang xảy ra bởi vì PHPUnit tạo ra một giả thời gian chạy và PhpStorm không thể biết rằng nó thực sự thực hiện giao diện.
Nếu bạn đang chế giễu phương pháp là tốt, bạn có thể sử dụng '/ ** @ var InterfaceA | PHPUnit_Framework_MockObject_MockObject */', do đó, nó gõ cho cả hai lớp. – Supericy
+1 @Supericy, đối tượng giả cũng thừa hưởng phương thức giao diện Mock Object 'expected()', sẽ mang lại phpStorm để phàn nàn phương thức không tìm thấy nếu bạn bỏ qua chỉ định cả 'InterfaceA' và' \ PHPUnit_Framework_MockObject_MockObject' –
là các công cụ CI như Scrutinizer sẽ đọc các chú thích này và xem xét biến giả của bạn như một vấn đề bởi vì (ví dụ) "Phương thức này chỉ tồn tại trong PHPUnit_Framework_MockObject_MockObject, nhưng không tồn tại trong InterfaceA". Nó sẽ được đánh dấu là một vấn đề và đánh giá mã của bạn sẽ bị ảnh hưởng ...! –