Тестирование базы данных PHPUnit с помощью Mockery Framework

Недавно я натолкнулся на Mockery Framework для PHP. У меня есть класс, который имеет конструктор, который принимает параметры соединения postgreSQL и соединяется с базой данных и другими методами для операций DML. Я хочу написать тестовые примеры для этих методов без фактического подключения к базе данных, поэтому хочу использовать Mockery.

Ниже приведен простой пример класса DBConnection. Может ли кто-нибудь дать мне пример кода для запуска контрольного примера для метода select?

class DBConnection {
private $conn; //db connection
private $debug = false;
private $schema;

public function __construct($host, $user, $pass, $db, $schema = 'main', $debug = DEBUG) {
$this->debug = $debug;
$this->conn = pg_connect("host=$host user=$user password=$pass dbname=$db");
if(!$this->conn) {
throw new DatabaseException('Database connection failed');
}
}public function select() {
$result = pg_prepare($this->conn, "my_query", 'SELECT * FROM shops WHERE name = $1');
$result = pg_execute($this->conn, "my_query", array("Joe's Widgets"));
return $result;
}
}

-1

Решение

Я предполагаю, что вы хотите издеваться над DBConnection->select() метод и убедитесь, что pg_prepare() а также pg_execute() функции называются.

Если вышеприведенное верно, я написал пакет composer, чтобы попытаться проверить вызовы функций php unit-testing/function-spy (https://github.com/unit-testing/function-spy)

Во-первых, вам придется пространство имен DBConnection учебный класс. Давайте предположим, что это в пространстве имен MyNamespace, Затем в своем тесте вы можете сделать что-то вроде этого:

<?php namespace MyNamespace
use UnitTesting\FunctionSpy\Spy;

class DBConnectionTest extends \PHPUnit_Framework_TestCase {
use \UnitTesting\FunctionSpy\SpyTrait;

protected function setUp()
{
// init the spy
$this->initSpy();
}
protected function tearDown()
{
// flush the spy so we can reset the calls after every test
$this->flushSpy();
}function test_construct_callsPgConnect_AndSetsConnection()
{
// create a fake return value for pg_connect()
$this->spy['pg_connect'] = 'connection';
$object = new DBConnection('host', 'user', 'pass', 'db', 'schema');
$this->assertFunctionLastCalledWith('pg_connect', array('host=host user=user password=pass dbname=db'));

$conn = $object->getConnection();  // your class doesn't have this method implemented, but it just returns the connection
$this->assertEquals('connection', $conn);

}

}

function pg_connect()
{
return Spy::pg_connect();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]