Я все еще довольно новый с PHPUnit, и я пытаюсь выяснить, как наилучшим образом проверить методы, как показано в 3-м классе.Доступ к базе данных из теста PHPUnit
Я понимаю, как работают макетные базы данных (я думаю), поскольку они могут возвращать значения на основе ввода, из файла XML и т. Д. Я не уверен, как предоставить данные для третьего примера, когда SQL-запросы выполняются внутри самих методов.
Я пытаюсь проверить код, который обращается к информации из БД и выполняет на ней операции. В настоящее время нет способа подкачать данные DB (например, массивы) этим методам.
Вопрос: Каков наилучший способ предоставления данных методу, который обрабатывает все его SQL-запросы внутренне?
<?php
class ThisMakesSense {
public function checkPassword($original, $hash) {
return (md5($original) == $hash);
}
}
class ThisMakesSenseTest {
public function testCheckPassword() {
$tms = new ThisMakesSense();
$data = array('[email protected]' => 'password1', '[email protected]' => 'password2');
foraech ($data as $email => $password) {
$hash = $this->mockDB()->doStuff()->getPasswordHashByEmail($email);
$this->assertTrue($tms->checkPassword($password, $hash), "Password for {$email} is invalid");
}
$tms->checkPassword($password, $hash);
}
}
/* The '$this->_db' object is basically an OOP way of using the
* mysql_* /mysqli_* functions. Replacing it is not an option
* right now.
*/
class DontUnderstand {
public function checkPassword($email, $password) {
$this->_db->query("SELECT password_hash FROM users WHERE email = '{$email}'");
$row = $this->_db->fetchAssoc();
return (md5($password) == $row['password_hash']);
}
}
class DontUnderstandTest extends PHPUnit_Framework_TestCase {
public function testCheckPassword() {
$du = new DontUnderstand();
$data = array('[email protected]' => 'password1', '[email protected]' => 'password2');
foreach ($data as $email => $pass) {
$this->assertTrue($du->checkPassword($email, $pass), "Password for {$email} is invalid");
}
}
}
(Для того, чтобы спасти кому-то неприятности, комментируя, что md5 и запросов методы являются лишь для простого примера)