<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=PHPUnitManual%3A8.7</id>
	<title>PHPUnitManual:8.7 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=PHPUnitManual%3A8.7"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:8.7&amp;action=history"/>
	<updated>2026-05-02T12:39:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:8.7&amp;diff=3403&amp;oldid=prev</id>
		<title>Onionmixer: PHPUnit 8.7 데이터베이스 검증 API 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:8.7&amp;diff=3403&amp;oldid=prev"/>
		<updated>2013-07-02T08:43:08Z</updated>

		<summary type="html">&lt;p&gt;PHPUnit 8.7 데이터베이스 검증 API 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;8.7 데이터베이스 검증 API&lt;br /&gt;
&lt;br /&gt;
==데이터베이스 검증 API==&lt;br /&gt;
&lt;br /&gt;
테스트용 도구로서, Database Extension 은 몇가지 검증을 제공합니다. 이를 사용하여 데이터베이스나 테이블의 현재 상태, 그리고 row 수를 검증할 수 있습니다. 이 절에서는, 이 기능들을 자세히 설명합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===테이블의 row 수를 검증===&lt;br /&gt;
&lt;br /&gt;
테이블의 row 수가 특정 수와 같은지를 조사하는 것은 흔히 의미가 있습니다. 이는 Connection API 를 사용하여 코드를 작성하지 않고도 간단히 할 수 있습니다. guestbook 에 row 를 추가한 뒤, 초기 상태의 2개의 엔트리에 1개의 row 가 추가되어 3개의 row 가 되었음을 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class GuestbookTest extends PHPUnit_Extensions_Database_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function testAddEntry()&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;assertEquals(2, $this-&amp;gt;getConnection()-&amp;gt;getRowCount(&amp;#039;guestbook&amp;#039;), &amp;quot;Pre-Condition&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        $guestbook = new Guestbook();&lt;br /&gt;
        $guestbook-&amp;gt;addEntry(&amp;quot;suzy&amp;quot;, &amp;quot;Hello world!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;assertEquals(3, $this-&amp;gt;getConnection()-&amp;gt;getRowCount(&amp;#039;guestbook&amp;#039;), &amp;quot;Inserting failed&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asserting the State of a Table===&lt;br /&gt;
&lt;br /&gt;
앞에서 설명한 검증도 유용합니다만, 정말로 체크해야 하는 것은 모든 값이 올바른 column 에 올바르게 등록되었는가 입니다. 이는, 테이블 검증을 통해 실행할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이를 위해 QueryTable 인스턴스를 정의하였습니다. 테이블 이름과 SQL query 로부터 내용을 얻은 뒤, 이를 파일 베이스, 혹은 배열 베이스의 dataset 과 비교합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class GuestbookTest extends PHPUnit_Extensions_Database_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function testAddEntry()&lt;br /&gt;
    {&lt;br /&gt;
        $guestbook = new Guestbook();&lt;br /&gt;
        $guestbook-&amp;gt;addEntry(&amp;quot;suzy&amp;quot;, &amp;quot;Hello world!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        $queryTable = $this-&amp;gt;getConnection()-&amp;gt;createQueryTable(&lt;br /&gt;
            &amp;#039;guestbook&amp;#039;, &amp;#039;SELECT * FROM guestbook&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
        $expectedTable = $this-&amp;gt;createFlatXmlDataSet(&amp;quot;expectedBook.xml&amp;quot;)&lt;br /&gt;
                              -&amp;gt;getTable(&amp;quot;guestbook&amp;quot;);&lt;br /&gt;
        $this-&amp;gt;assertTablesEqual($expectedTable, $queryTable);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음으로, 이 검증을 사용하는 flat XML 파일 expectedBook.xml 를 준비합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;dataset&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;1&amp;quot; content=&amp;quot;Hello buddy!&amp;quot; user=&amp;quot;joe&amp;quot; created=&amp;quot;2010-04-24 17:15:23&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;2&amp;quot; content=&amp;quot;I like it!&amp;quot; user=&amp;quot;nancy&amp;quot; created=&amp;quot;2010-04-26 12:14:20&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;3&amp;quot; content=&amp;quot;Hello world!&amp;quot; user=&amp;quot;suzy&amp;quot; created=&amp;quot;2010-05-01 21:47:08&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/dataset&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아쉽게도 이 검증이 성공하는 것은 2010–05–01 21:47:08 에 실행했을 때 뿐입니다. 데이터베이스의 테스트에서는 언제나 일시가 문제가 됩니다. 이를 회피하는 수단으로는, &amp;quot;created&amp;quot; column 을 검증에서 제외하는 방법이 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
조정 후의 flat XML 파일 expectedBook.xml 는 다음과 같이 되고, 검증이 성공 가능하게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;dataset&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;1&amp;quot; content=&amp;quot;Hello buddy!&amp;quot; user=&amp;quot;joe&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;2&amp;quot; content=&amp;quot;I like it!&amp;quot; user=&amp;quot;nancy&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;guestbook id=&amp;quot;3&amp;quot; content=&amp;quot;Hello world!&amp;quot; user=&amp;quot;suzy&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/dataset&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
QueryTable 호출도 수정해야만 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$queryTable = $this-&amp;gt;getConnection()-&amp;gt;createQueryTable(&lt;br /&gt;
    &amp;#039;guestbook&amp;#039;, &amp;#039;SELECT id, content, user FROM guestbook&amp;#039;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Query 의 결과를 검증===&lt;br /&gt;
&lt;br /&gt;
복잡한 query 의 결과에 대한 검증은 QueryTable 방식으로 할 수 있습니다. 결과의 이름과 query 를 지정한 후, dataset 과 비교하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ComplexQueryTest extends PHPUnit_Extensions_Database_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function testComplexQuery()&lt;br /&gt;
    {&lt;br /&gt;
        $queryTable = $this-&amp;gt;getConnection()-&amp;gt;createQueryTable(&lt;br /&gt;
            &amp;#039;myComplexQuery&amp;#039;, &amp;#039;SELECT complexQuery...&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
        $expectedTable = $this-&amp;gt;createFlatXmlDataSet(&amp;quot;complexQueryAssertion.xml&amp;quot;)&lt;br /&gt;
                              -&amp;gt;getTable(&amp;quot;myComplexQuery&amp;quot;);&lt;br /&gt;
        $this-&amp;gt;assertTablesEqual($expectedTable, $queryTable);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===여러 테이블의 상태를 검증===&lt;br /&gt;
&lt;br /&gt;
물론, 여러 테이블의 상태를 한 번에 확인하거나, query dataset 을 파일 베이스의 dataset 과 비교할 수도 있습니다. dataset 의 검증에는 2가지 방법이 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
연결된 Database (DB) dataset 를 사용하여, 이를 파일 베이스의 dataset 과 비교한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class DataSetAssertionsTest extends PHPUnit_Extensions_Database_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function testCreateDataSetAssertion()&lt;br /&gt;
    {&lt;br /&gt;
        $dataSet = $this-&amp;gt;getConnection()-&amp;gt;createDataSet(array(&amp;#039;guestbook&amp;#039;));&lt;br /&gt;
        $expectedDataSet = $this-&amp;gt;createFlatXmlDataSet(&amp;#039;guestbook.xml&amp;#039;);&lt;br /&gt;
        $this-&amp;gt;assertDataSetsEqual($expectedDataSet, $dataSet);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dataset 를 자작할 수도 있습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class DataSetAssertionsTest extends PHPUnit_Extensions_Database_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function testManualDataSetAssertion()&lt;br /&gt;
    {&lt;br /&gt;
        $dataSet = new PHPUnit_Extensions_Database_DataSet_QueryDataSet();&lt;br /&gt;
        $dataSet-&amp;gt;addTable(&amp;#039;guestbook&amp;#039;, &amp;#039;SELECT id, content, user FROM guestbook&amp;#039;); // additional tables&lt;br /&gt;
        $expectedDataSet = $this-&amp;gt;createFlatXmlDataSet(&amp;#039;guestbook.xml&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;assertDataSetsEqual($expectedDataSet, $dataSet);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:PHPUnitManual]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>