@danip: да, мы делаем это таким образом на Java. Но я уверен, что есть способ достичь этого и в PHP. Дождемся, пока другие ответят на эту тему.
я есть метод с некоторой логикой, и я не уверен, как его тестировать. Поскольку это модульный тест для этого конкретного метода, он должен выполняться без подключения к базе данных. Я читал о заглушках и макетах, но не могу найти способ применить их в этой ситуации.
Я хотел бы заставить Client: GetClient возвращать объект client с правильными свойствами, чтобы я мог проверить каждую логическую ветвь.
class ClientType {
function GetClientType($id) {
$objClient = Client::GetClient($id);
if ($objClient->Returning == 1) {
return 'returning';
}
else {
return 'normal';
}
}
Это тест, который я имел в виду
class ResourceTest extends PHPUnit_Framework_TestCase {
function testGetClientType() {
$objClientType = new ClientType();
$this->assertTrue($objClientType->GetClientType(100), 'normal');
}
}
Проблема заключается в зависимости $ objClient = Client :: GetClient ($ id); GetClient извлечет клиента из базы данных, но мне нужно заменить его на заглушку, чтобы модульные тесты работали без реального доступа к базе данных.
ЗаключениеЕсли у вас есть код, подобный представленному, выполните рефакторинг и используйте Dependency Injection.Если у вас есть устаревший код или вы просто не хотите проводить рефакторинг, попробуйте это решение:http://sebastian-bergmann.de/archives/885-Stubbing-Hard-Coded-Dependencies.html