Итак, у меня есть фабричный класс, реализующий Zend \ ServiceManager \ FactoryInterface:
class GatewayFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$config = new Config($serviceLocator->get('ApplicationConfig'));
if ('phpunit' === APPLICATION_ENV) {
return new Gateway($config, new Mock());
}
return new Gateway($config);
}
}
Он всегда возвращает экземпляр шлюза, но добавляет фиктивный адаптер в качестве второго параметра, если константа APPLICATION_ENV равна «phpunit».
Я запускаю свои модульные тесты с такой конфигурацией:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/unit/Bootstrap.php" colors="true" backupGlobals="false" backupStaticAttributes="false" syntaxCheck="false">
<testsuites>
<testsuite name="mysuite">
<directory suffix="Test.php">tests/unit</directory>
</testsuite>
</testsuites>
<php>
<const name="APPLICATION_ENV" value="phpunit"/>
</php>
</phpunit>
Поэтому для APPLICATION_ENV установлено значение «phpunit». Как написать тест для случая, когда константа другая?
Я могу проверить условие if, но не могу понять, как проверить случай, когда он не входит в условие if:
class GatewayFactoryTest extends PHPUnit_Framework_TestCase
{
public function testCreateServiceReturnsGatewayWithMockAdapterWhenApplicationEnvIsPhpunit()
{
$factory = new GatewayFactory();
$gateway = $factory->createService(Bootstrap::getServiceManager());
$this->assertInstanceOf('Mock', $gateway->getAdapter());
}
public function testCreateServiceReturnsGatewayWithSockerAdapterWhenApplicationEnvIsNotPhpunit()
{
// TODO HOW TO DO THIS?
}
}
1 ответ
Вы не должны писать код, который используется только в тестах. Вы должны написать код, который можно протестировать.
Вы могли бы сделать что-то подобное.
public function createService(ServiceLocatorInterface $serviceLocator, $mock = null)
{
$config = new Config($serviceLocator->get('ApplicationConfig'));
return new Gateway($config, $mock);
}
Но я бы тоже посмотрел на класс Gateway
. Зачем иногда нужен лишний предмет?
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
putenv
по обе стороны от вызова createService в своем тесте.