У меня есть следующий класс
namespace MyApp;
use MyApp\SomeInterface;
class MyClass
{
public function __construct(SomeInterface $s)
{
//Some Logic here
}
//Another methods implemented There
}
SomeInterface содержит следующее:
namespace MyApp
interface SomeInterface
{
/**
* @return SomeObject
*/
public function someMethodToImpement();
}
И я хочу создать макет над моим тестовым классом phpunit:
namespace Tests\MyApp;
use PHPUnit\Framework\TestCase;
use MyApp\MyClass;
use MyApp\SomeInterface;
class MyClassTest extends TestCase
{
public function someTest()
{
$fakeClass=new class{
public function myFunction($arg1,$arg2)
{
//Dummy logic to test if called
return $arg1+$arg2;
}
};
$mockInterface=$this->createMock(SomeInterface::class)
->method('someMethodToImpement')
->will($this->returnValue($fakeClass));
$myActualObject=new MyClass($mockInterface);
}
}
Но как только я его запустил, я получаю сообщение об ошибке:
Tests \ MyApp \ MyClassTest :: someTest TypeError: Аргумент 1, передаваемый MyApp \ MyClass :: __ construct (), должен реализовывать интерфейс MyApp \SomeInterface, экземпляр данного PHPUnit \ Framework \ MockObject \ Builder \ InvocationMocker, вызывается в /home/vagrant/code/tests/MyApp/MyClassTest.php в строке
Знаете ли вы, почему это происходит и какна самом деле создаст макет интерфейса?