Метод, который я тестирую, выглядит следующим образом:
function X($arg)
{
// Code ...
$object = new Object;
// Code ...
}
Есть ли способ издеваться над этим объектом?
Не с Mock Object PHPUnit в вашем модульном тесте вы не можете.
В зависимости от того, как вы загружаете свои классы, вы сможете создать «фиктивный» класс, который заменит объект. Это будет выглядеть так:
Ваш тестовый файл:
class Object {
<mock functionality here>
}
class TestCase extends PHPUnit_Framework_TestCase {
<your tests>
}
Однако это может вызвать проблемы, если вы хотите на самом деле проверить Object
в другом тесте. В этом случае вы получите фатальную ошибку, утверждающую, что вы не можете переопределить класс. Это не лучшая практика.
Лучше всего реорганизовать класс таким образом, чтобы вы использовали Dependency Injection. Измените класс так, чтобы он принимал Object в качестве аргумента конструктора или являлся частью сигнатуры метода.
Эта статья может быть полезна: http://misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator/
Других решений пока нет …