Помогите мне написать тест PHPUnit для следующего метода - PullRequest
0 голосов
/ 20 мая 2010
    public function getAvailableVideosByRfid($rfid, $count=200) {

$query="SELECT id FROM sometable WHERE rfid='$rfid'";
$result = mysql_query($query);
$count2 = mysql_num_rows($result);

if ($count2){ //this rfid has been claimed

return 0;

}

Мои утверждения: 1). $ rfid - это строка длиной 5 символов 2). Я получаю правильный набор результатов

Спасибо

Пожалуйста, предположите, что у меня есть следующий код модульного теста:

class videoSharingTest extends PHPUnit_Framework_TestCase {

/**
 * @var videoSharing
 */
protected $object;

/**
 * Sets up the fixture, for example, opens a network connection.
 * This method is called before a test is executed.
 */
protected function setUp() {
    $this->object = new videoSharing;
}

/**
 * Tears down the fixture, for example, closes a network connection.
 * This method is called after a test is executed.
 */
protected function tearDown() {

}

проверка публичных функцийGetAllVideosByRfid () {

****** Что мне сюда поставить *****

}

1 Ответ

1 голос
/ 21 мая 2010

Вам нужно децентрализовать вашу базу данных, обычно с помощью уровня абстракции базы данных, который вы бы макетировали. Таким образом добавляя -> setDatabase () и т. Д. К объекту, который имеет метод, который вы используете. Тогда внутри вашего setUp () {...} вы должны установить объект базы данных в макет:

$this->object->setDatabase($mockDb);

Тогда вы бы изменили

$ result = mysql_query ($ query); $ count2 = mysql_num_rows ($ result);

для использования некоторой формы PDO - чтобы вы могли вызывать setDatabase () с PDO Sql Lite. Например:

setUp() { $this->object->setDatabase($mockDb); }
testFunction() {
   $rfid = 'the rfid to use in the test';

   //make sure no videos exist yet
   $this->assertEquals(0, count($this->object->getAvailableVideosByRfid($rfid, ..);

   //you may want to assert that it returns a null/false/empty array/etc.

   $db = $this->object->getDatabase();
   $records = array(... some data ...);
   $db->insert($records); //psuedo code
   $vids = $this->object->getAvailableVideosByRfid($rfid, ..); //however you map
   $this->assertEquals(count($records), count(vids));

   foreach($vids as $video) {
      //here you would map the $video to the corresponidng $record to make sure all 
        vital data was stored and retrieved from the method.
   }
}

Как правило, все это делается в PDO Sqlite, чтобы не создавалась / не создавалась настоящая база данных только для модульного теста, чтобы она могла жить и умереть вместе с тестом, и любой разработчик мог бы использовать ее без необходимости в конфигурации.

...