Я пытаюсь использовать TDD для класса, который управляет подключениями к базе данных. ОднакоInstance mocking и implicit constructors
- Я часто развивается от сети, где базы данных доступны
- Я хочу просто проверить классы не возиться с реальными связями, даже SQLite
:memory:
- я могу хотеть, чтобы проверить соединения в платформенно-независимом режиме (например, обмен объектами PDO для объектов MySQLi и т. д.). Тем более, что базы данных не все MySQL, некоторые из них - SQLServer.
По существу я хочу сделать это:
class ConnectionManager {
...
public function getConnection($name) {
$params = $this->lookup($name);
return new \PDO($params['spec'], $params['username'], $params['password']);
}
}
И в моем тестовом бегуна:
class ConnectionManagerTest extends \PHPUnit_Framework_TestCase {
public function testGetConnection() {
$cxn = new ConnectionManager();
$this->assertNotNull($cxn->getConnection('test')); // or whatever
}
}
Как-то я хотел бы использовать макет класса PDO. Является ли мой единственный вариант добавить явный параметр в конструктор тестового класса или один из его методов? Я пробовал использовать «Экземпляр издевательства» в соответствии с документацией Mockery, но поскольку я использую автозагрузку, которая приводит к «фатальной ошибке, не может переопределить класс» (duh).
Я бы предпочел не загрязнять контракты с использованием кода, используемого только при тестировании, но это мой единственный вариант?
Спасибо за вашу помощь
Менеджер соединений всегда (и только) возвращает 'PDO'. Итак, вам, вероятно, нужен другой менеджер соединений, поскольку ваш тест теперь получился? – hakre
На самом деле проблема диспетчера подключений несколько менее важна, так как PDO поддерживает несколько разных типов соединений. Основная проблема заключается в том, что реальные соединения недоступны при разработке вне сети.И мне, возможно, придется сложить эти «простые старые объекты PHP» в структуру позже, но я еще не знаю, что, поэтому я хотел бы быть как можно скорее агностиком-реализацией – excatholica
Ну, я только ткнул из-за имени. Если вам нужна эта работа, Create 'class ConnectionManagerStub расширяет ConnectionManager', а затем меняет те, которые вам нужны, чтобы проверить, чтобы зависимости исчезли, сохраняя заглушку для совместной работы, например. для ваших тестов вообще не используется какой-либо PDO (или один в памяти, а какой нет). – hakre