<?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%3A6</id>
	<title>PHPUnitManual:6 - 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%3A6"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:6&amp;action=history"/>
	<updated>2026-05-01T15:50:27Z</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:6&amp;diff=3387&amp;oldid=prev</id>
		<title>Onionmixer: PHPUnit 6 Fixtures 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:6&amp;diff=3387&amp;oldid=prev"/>
		<updated>2013-07-02T07:51:50Z</updated>

		<summary type="html">&lt;p&gt;PHPUnit 6 Fixtures 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;제 6장. Fixtures&lt;br /&gt;
&lt;br /&gt;
테스트의 작성 중 가장 많은 시간이 걸리는 작업은, 테스트를 개시하기 위한 사전 설정과, 테스트 종료 후의 처리를 작성하는 것입니다. 이 사전 설정을 테스트의 fixture 라고 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;예4.1 PHPUnit 에서의 배열 조작 테스트&amp;quot; 에서 fixture 는 $fixture 배열 하나뿐이었습니다. 그렇지만 대부분의 경우 fixture 는 보다 복잡하고, 이를 준비하기 위해 많은 양의 코드가 필요합니다. 결과적으로 테스트의 내용이 fixture 를 설정하기 위한 코드에 가려지게 됩니다. 이 문제는, 여러 테스트에 비슷한 내용의 fixture 를 설정할 때 명백하게 드러납니다. 테스트 프레임워크의 도움이 없이는 각각의 테스트 안에서 비슷한 내용의 준비 코드를 반복해서 작성하게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PHPUnit 에서는, 준비용 코드의 공유를 서포트합니다. 각 테스트 메소드가 실행되기 전에, setUp() 템플릿 메소드가 실행됩니다. setUp() 은 테스트 대상 오브젝트를 생성하는 등의 처리에 사용됩니다. 테스트 메소드의 실행이 종료된 뒤, 성공 여부에 관계없이 tearDown() 템플릿 메소드가 실행됩니다. tearDown() 에서는 테스트 대상 오브젝트의 후처리가 이루어집니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;예4.2 @depends 선언을 사용한 의존성 표현&amp;quot; 에서는 producer-consumer 관계를 사용하여 복수의 테스트에서 fixture 를 공유하였습니다. 이는 필수는 아니고 언제나 사용 가능한 것도 아닙니다. &amp;quot;예6.1 setUp() 을 사용한 stack fixture 의 작성&amp;quot; 에서는, 정해진 fixture 를 재사용하는 것이 아닌 코드를 생성하여 fixture 를 생성하는 StackTest 방식이 표현되어 있습니다. 인스턴스 변수 $stack 를 선언하고, 메소드의 로컬 변수 대신 이 변수를 사용합니다. 그 뒤, setUp() 메소드에서 array 를 작성합니다. 마지막으로 테스트 메소드에서 불필요한 코드를 삭제하고, 검증 메소드인 assertEquals() 에 메소드의 로컬 변수 $stack 대신 새롭게 도입한 인스턴스 변수 $this-&amp;gt;stack 를 사용합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예6.1: setUp() 을 사용한 stack fixture 의 작성&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class StackTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
    protected $stack;&lt;br /&gt;
 &lt;br /&gt;
    protected function setUp()&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;stack = array();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testEmpty()&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;assertTrue(empty($this-&amp;gt;stack));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testPush()&lt;br /&gt;
    {&lt;br /&gt;
        array_push($this-&amp;gt;stack, &amp;#039;foo&amp;#039;);&lt;br /&gt;
        $this-&amp;gt;assertEquals(&amp;#039;foo&amp;#039;, $this-&amp;gt;stack[count($this-&amp;gt;stack)-1]);&lt;br /&gt;
        $this-&amp;gt;assertFalse(empty($this-&amp;gt;stack));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testPop()&lt;br /&gt;
    {&lt;br /&gt;
        array_push($this-&amp;gt;stack, &amp;#039;foo&amp;#039;);&lt;br /&gt;
        $this-&amp;gt;assertEquals(&amp;#039;foo&amp;#039;, array_pop($this-&amp;gt;stack));&lt;br /&gt;
        $this-&amp;gt;assertTrue(empty($this-&amp;gt;stack));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
템플릿 메소드인 setUp() 과 tearDown() 은, 테스트 케이스 클래스의 테스트 메소드 별로 (그리고 최초로 인스턴스를 작성할 때) 한 번 씩 실행됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
또, 템플릿 메소드 setUpBeforeClass() 와 tearDownAfterClass() 는, 테스트 케이스 클래스의 최초의 테스트 메소드의 실행 전과 테스트 케이스 클래스의 마지막 테스트 실행 후에 호출됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
다음 예는 테스트 케이스 클래스에서 사용 가능한 모든 템플릿 메소드입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예6.2: 사용 가능한 모든 템플릿 메소드&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class TemplateMethodsTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public static function setUpBeforeClass()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function setUp()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function assertPreConditions()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testOne()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
        $this-&amp;gt;assertTrue(TRUE);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testTwo()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
        $this-&amp;gt;assertTrue(FALSE);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function assertPostConditions()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function tearDown()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public static function tearDownAfterClass()&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function onNotSuccessfulTest(Exception $e)&lt;br /&gt;
    {&lt;br /&gt;
        fwrite(STDOUT, __METHOD__ . &amp;quot;\n&amp;quot;);&lt;br /&gt;
        throw $e;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
phpunit TemplateMethodsTest&lt;br /&gt;
PHPUnit 3.7.0 by Sebastian Bergmann.&lt;br /&gt;
&lt;br /&gt;
TemplateMethodsTest::setUpBeforeClass&lt;br /&gt;
TemplateMethodsTest::setUp&lt;br /&gt;
TemplateMethodsTest::assertPreConditions&lt;br /&gt;
TemplateMethodsTest::testOne&lt;br /&gt;
TemplateMethodsTest::assertPostConditions&lt;br /&gt;
TemplateMethodsTest::tearDown&lt;br /&gt;
.TemplateMethodsTest::setUp&lt;br /&gt;
TemplateMethodsTest::assertPreConditions&lt;br /&gt;
TemplateMethodsTest::testTwo&lt;br /&gt;
TemplateMethodsTest::tearDown&lt;br /&gt;
TemplateMethodsTest::onNotSuccessfulTest&lt;br /&gt;
FTemplateMethodsTest::tearDownAfterClass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Time: 0 seconds, Memory: 5.25Mb&lt;br /&gt;
&lt;br /&gt;
There was 1 failure:&lt;br /&gt;
&lt;br /&gt;
1) TemplateMethodsTest::testTwo&lt;br /&gt;
Failed asserting that &amp;lt;boolean:false&amp;gt; is true.&lt;br /&gt;
/home/sb/TemplateMethodsTest.php:30&lt;br /&gt;
&lt;br /&gt;
FAILURES!&lt;br /&gt;
Tests: 2, Assertions: 2, Failures: 1.&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>