Я изучаю модульное тестирование с помощью PHPUnit и запускаю странную проблему с макетными объектами, которые я не могу решить. Я создал эти фиктивные файлы в качестве примера того, что я испытываю:PHPUnit mock object methods
Class1
class PrimaryObj1
{
function doNothing(SecondObj $s)
{
}
}
Class2
class PrimaryObj2
{
function doNothing(SecondObj $s)
{
$s->TestMethod();
}
}
и тестовый файл как:
class PrimaryObj1_test extends PHPUnit_Framework_TestCase
{
private $primaryObj;
function setUp()
{
$this->primaryObj = new PrimaryObj1();
}
function testDoNothing()
{
$secondObj = $this->getMock('SecondObj');
$secondObj->expects($this->once())
->method("TestMethod");
$this->primaryObj->doNothing($secondObj);
}
}
(один тестовый файл для каждого фиктивного класса, где все одно и то же, за исключением имени класса).
Когда я бегу PHPUnit, это то, что я получаю:
Running Tests/PrimaryObj1_test.php
1) PrimaryObj1_test::testDoNothing
Expectation failed for method name is equal to <string:TestMethod> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.
Running Tests/PrimaryObj2_test.php
Fatal error: Call to undefined method Mock_SecondObj_99c898e7::TestMethod() in PrimaryObj2.php on line 5
Итак, сначала он сошел с ума, что он не назвал ожидаемый метод, но тогда, когда я делаю это злится потому что это не определено. Я просто не могу победить. Я думаю, именно поэтому я все еще одинок ...
Любые мысли о том, почему это может происходить?
Показать код 'SecondObj' – hek2mgl
SecondObj существует только как макет. У него нет объявления кода или класса – baiano
AFAIK должен быть издеваемым классом – hek2mgl