W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
作為測試工具,數(shù)據(jù)庫擴展模塊理所當然會提供一些斷言,可以用來驗證數(shù)據(jù)庫的當前狀態(tài)、表的當前狀態(tài)、表中數(shù)據(jù)行的數(shù)量。本節(jié)將詳細描述這部分功能:
很多時候,確認表中是否包含特定數(shù)量的數(shù)據(jù)行是非常有幫助的。可以輕松做到這一點,不需要任何額外的使用連接 API 的粘合劑代碼。比如說,在往留言本中插入一個新行之后,想要確認在表中除了之前的例子中一直都有的兩行之外還有第三行:
<?php
class GuestbookTest extends PHPUnit_Extensions_Database_TestCase
{
public function testAddEntry()
{
$this->assertEquals(2, $this->getConnection()->getRowCount('guestbook'), "Pre-Condition");
$guestbook = new Guestbook();
$guestbook->addEntry("suzy", "Hello world!");
$this->assertEquals(3, $this->getConnection()->getRowCount('guestbook'), "Inserting failed");
}
}
?>
前面的這個斷言很有幫助,但是肯定還想要檢驗表的實際內容,好核實是否所有值都寫到了正確的列中??梢酝ㄟ^表斷言來做到這一點。
為此,先定義一個 QueryTable 實例,從表名稱和 SQL 查詢派生出其內容,隨后將其與一個基于文件/數(shù)組的數(shù)據(jù)集進行比較:
<?php
class GuestbookTest extends PHPUnit_Extensions_Database_TestCase
{
public function testAddEntry()
{
$guestbook = new Guestbook();
$guestbook->addEntry("suzy", "Hello world!");
$queryTable = $this->getConnection()->createQueryTable(
'guestbook', 'SELECT * FROM guestbook'
);
$expectedTable = $this->createFlatXmlDataSet("expectedBook.xml")
->getTable("guestbook");
$this->assertTablesEqual($expectedTable, $queryTable);
}
}
?>
現(xiàn)在需要為這個斷言編寫Flat XML 文件 expectedBook.xml:
<?xml version="1.0" ?>
<dataset>
<guestbook id="1" content="Hello buddy!" user="joe" created="2010-04-24 17:15:23" />
<guestbook id="2" content="I like it!" user="nancy" created="2010-04-26 12:14:20" />
<guestbook id="3" content="Hello world!" user="suzy" created="2010-05-01 21:47:08" />
</dataset>
在整個時間長河中,只有特定的一秒鐘內這個斷言可以通過評定,在 2010–05–01 21:47:08。在數(shù)據(jù)庫測試中,日期構成了一個特殊的問題。可以從這個斷言中省略 “created” 列來規(guī)避失敗。
為了讓斷言能得以通過, Flat XML 文件 expectedBook.xml 需要調整成大致類似這樣:
<?xml version="1.0" ?>
<dataset>
<guestbook id="1" content="Hello buddy!" user="joe" />
<guestbook id="2" content="I like it!" user="nancy" />
<guestbook id="3" content="Hello world!" user="suzy" />
</dataset>
還得修正一下 QueryTable 的調用:
<?php
$queryTable = $this->getConnection()->createQueryTable(
'guestbook', 'SELECT id, content, user FROM guestbook'
);
?>
利用 QueryTable,也可以對復雜查詢的結果作出斷言,只需要指定查詢以及結果名稱,并隨后將其與某個數(shù)據(jù)集進行比較:
<?php
class ComplexQueryTest extends PHPUnit_Extensions_Database_TestCase
{
public function testComplexQuery()
{
$queryTable = $this->getConnection()->createQueryTable(
'myComplexQuery', 'SELECT complexQuery...'
);
$expectedTable = $this->createFlatXmlDataSet("complexQueryAssertion.xml")
->getTable("myComplexQuery");
$this->assertTablesEqual($expectedTable, $queryTable);
}
}
?>
當然可以一次性對多個表的狀態(tài)作出斷言,并將查詢數(shù)據(jù)集與基于文件的數(shù)據(jù)集進行比較。有兩種不同的方式來進行數(shù)據(jù)集斷言。
可以從自數(shù)據(jù)庫連接建立數(shù)據(jù)庫數(shù)據(jù)集,并將其與基于文件的數(shù)據(jù)集進行比較。
<?php
class DataSetAssertionsTest extends PHPUnit_Extensions_Database_TestCase
{
public function testCreateDataSetAssertion()
{
$dataSet = $this->getConnection()->createDataSet(array('guestbook'));
$expectedDataSet = $this->createFlatXmlDataSet('guestbook.xml');
$this->assertDataSetsEqual($expectedDataSet, $dataSet);
}
}
?>
也可以自行構造數(shù)據(jù)集:
<?php
class DataSetAssertionsTest extends PHPUnit_Extensions_Database_TestCase
{
public function testManualDataSetAssertion()
{
$dataSet = new PHPUnit_Extensions_Database_DataSet_QueryDataSet();
$dataSet->addTable('guestbook', 'SELECT id, content, user FROM guestbook'); // additional tables
$expectedDataSet = $this->createFlatXmlDataSet('guestbook.xml');
$this->assertDataSetsEqual($expectedDataSet, $dataSet);
}
}
?>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: