Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
//...
$sms_instance = $this->getMock('SMS', array('send'));
$sms_instance
->expects($this->once())
->method('send')
->with($this->equalTo($batman->phone_number), $this->equalTo('some text'));
$order = new Order($sms_instance);
//...
class Users {
public function getList() {
$users = array();
$result = mysql_query('SELECT * FROM users');
while ($user = mysql_fetch_assoc($result) {
$users[] = $user();
}
}
}
//...
$users = new Users();
$user_list = Users->getList();
$this->assertEqual($expected, $user_list);
//...
class MySqlDb {
public function query($query) {
mysql_query($query);
}
public function fetch_assoc($result) {
mysql_fetch_assoc($result);
}
}
class Users {
private $db;
public function __construct(MySqlDb $storage) {
$this->db = $db;
}
public function getList() {
$result = $db->query('SELECT * FROM users');
$users = array();
while ($user = $db->fetch_assoc($result) {
$users[] = $user;
}
}
}
//...
$db = new MySqlDb();
$users = new Users($db);
$user_list = Users->getList();
$this->assertEqual($expected, $user_list);
//...
//...
$db = $this->getMock('MySqlDb', array('query', 'fetch_object'));
$db
->expects($this->once())
->method('query')
->with($this->equalTo('SELECT * FROM users'))
->will($this->returnValue(1275));
$db
->expects($this->exactly(3))
->method('fetch_object')
->with($this->equalTo(1275))
->will($this->onConsecutiveCalls(
array ('id' -> 1, 'name' -> 'Alice'),
array ('id' -> 2, 'name' -> 'Bob'),
false
);
$users = new Users($db);
$user_list = Users->getList();
$this->assertEqual($expected, $user_list);
//...
((a AND b) OR c) AND THEN NOT (e) это случалось как минимум N раз в течении предидущего сеанса и длилось 15 секунд. class TestModelTest extends PHPUnit_Framework_TestCase {
public function testSaveDataCallDbCorrectWhenDataIsValid {
// prepare valid data
$num = 15; // between 10 and 20
$str = 'something'; // non empty
// prepare mock PDO object
$db_connection = $this->getMock('mysqli', array('query')); // на самом деле конструктор сложнее
$db_connection
->expects($this->once)
->method('query')
->with($this->equalTo("INSERT INTO tests (`num`, `str`) VALUES ($num, '$str')");
// set data
$model = new TestModel($db_connection);
$model->setAttributes($num, $str);
// test
$model->saveData();
}
}
class TestTest extends PHPUnit_Extensions_Database_TestCase {
// куча инициализаций
public function testAddTestFormHandlerSaveValidDataToDb {
// prepare valid data
$num = 15; // between 10 and 20
$str = 'something'; // non empty
// process data
$request = new Request('POST', '/tests', array('num' -> $num, 'str' -> $str));
$app = new Application();
$app->handle($request);
// test
$queryTable = $this->getConnection()->createQueryTable(
'tests', 'SELECT * FROM tests'
);
$expectedTable = $this->createFlatXmlDataSet("expectedTests.xml")
->getTable("tests");
$this->assertTablesEqual($expectedTable, $queryTable);
}
}
$this->assertTrue($model->saveData()); //записали данные
$this->assertTrue($model->loadData()); //прочитали данные
require_once 'PHPUnit/Autoload.php';pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnitpear config-set preferred_state beta
Unit-тестирование от начинающего начинающим