<?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%3A4.1</id>
	<title>PHPUnitManual:4.1 - 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%3A4.1"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:4.1&amp;action=history"/>
	<updated>2026-05-02T01:27:30Z</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:4.1&amp;diff=3372&amp;oldid=prev</id>
		<title>Onionmixer: PHPUnit 4.1 테스트의 의존성 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:4.1&amp;diff=3372&amp;oldid=prev"/>
		<updated>2013-06-06T10:05:16Z</updated>

		<summary type="html">&lt;p&gt;PHPUnit 4.1 테스트의 의존성 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;4.1 테스트의 의존성&lt;br /&gt;
&lt;br /&gt;
==테스트의 의존성==&lt;br /&gt;
&lt;br /&gt;
Unit Tests are primarily written as a good practice to help developers identify and fix bugs, to refactor code and to serve as documentation for a unit of software under test. To achieve these benefits, unit tests ideally should cover all the possible paths in a program. One unit test usually covers one specific path in one function or method. However a test method is not necessary an encapsulated, independent entity. Often there are implicit dependencies between test methods, hidden in the implementation scenario of a test.&lt;br /&gt;
&lt;br /&gt;
단위 테스트 (unit test) 를 작성하는 근본적인 목적은, 버그의 발견과 수정, 코드 리팩토링의 용이성, 테스트 대상에 관한 문서 역할이다. 이 목적을 달성하기 위해서는, 단위 테스트가 프로그램 안의 모든 경우의 흐름 (route) 를 커버하는 것이 이상적이다. 하나의 단위 테스트가 커버하는 범위는, 일반적으로 하나의 함수나 메소드 안의 특정 한 흐름이다. 하지만 테스트 메소드는 캡슐화를 통해 독립시켜야만 할 필요는 없다. 복수의 테스트 메소드 간에 암묵적인 의존성이 있어서 드러나지 않은 실동작 시나리오가 테스트 안에 존재하는 것은 흔하다. - Adrian Kuhn et. al.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PHPUnit 에서는 테스트 메소드 간의 의존성을 명시적으로 선언할 수 있습니다. 여기서 말하는 의존성이란, 테스트 메소드가 실행되는 순서를 정의하는 것은 아닙니다. 생산자 (producer) 가 테스트 fixture 를 만들어 fixture 의 인스턴스를 반환 (return) 하고, 이에 의존하는 소비자 (consumer) 가 인스턴스를 받아 이용하는 것입니다.&lt;br /&gt;
&lt;br /&gt;
* 생산자란, 테스트 대상의 유닛을 생성하여 반환하는 테스트 메소드이다&lt;br /&gt;
* 소비자란, 생산자가 반환값에 의존하는 테스트 메소드입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예제 4.2 @depends 선언을 이용한 의존성의 표현&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;
	public function testEmpty()&lt;br /&gt;
	{&lt;br /&gt;
		$stack = array();&lt;br /&gt;
		$this-&amp;gt;assertEmpty($stack);&lt;br /&gt;
		return $stack;&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * @depends testEmpty&lt;br /&gt;
	 */&lt;br /&gt;
	public function testPush(array $stack)&lt;br /&gt;
	{&lt;br /&gt;
		array_push($stack, &amp;#039;foo&amp;#039;);&lt;br /&gt;
		$this-&amp;gt;assertEquals(&amp;#039;foo&amp;#039;, $stack[count($stack)-1]);&lt;br /&gt;
		$this-&amp;gt;assertNotEmpty($stack);&lt;br /&gt;
		return $stack;&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * @depends testPush&lt;br /&gt;
	 */&lt;br /&gt;
	public function testPop(array $stack)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;assertEquals(&amp;#039;foo&amp;#039;, array_pop($stack));&lt;br /&gt;
		$this-&amp;gt;assertEmpty($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;
위 예에서는, 첫번째 테스트인 testEmpty() 에서 새 배열을 만들고, 배열이 비어 있음을 확인합니다. 이 테스트는 fixture 를 반환합니다. 두번째 테스트인 testPush() 는 testEmpty() 에 의존하고 있기에 의존하는 테스트의 결과를 인수로 받습니다. 마지막 testPop() 는 testPush() 에 의존하고 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
문제 범위를 빠르게 찾기 위해서는, 실패한 테스트를 쉽게 발견하게 하여야 합니다. 이 때문에 PHPUnit 에서는, 하나의 테스트가 실패한 경우, 그 테스트에 의존하는 다른 테스트의 실행을 스킵합니다. 예제 4.3 &amp;quot;테스트의 의존성의 활용&amp;quot; 은 테스트 간의 의존성을 활용하여 문제점을 쉽게 발견하게 되는 예입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예제 4.3 테스트의 의존성의 활용&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 DependencyFailureTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
	public function testOne()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;assertTrue(FALSE);&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * @depends testOne&lt;br /&gt;
	 */&lt;br /&gt;
	public function testTwo()&lt;br /&gt;
	{&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 3.7.0 by Sebastian Bergmann.&lt;br /&gt;
FS&lt;br /&gt;
Time: 0 seconds, Memory: 5.00Mb&lt;br /&gt;
There was 1 failure:&lt;br /&gt;
1) DependencyFailureTest::testOne&lt;br /&gt;
Failed asserting that false is true.&lt;br /&gt;
/home/sb/DependencyFailureTest.php:6&lt;br /&gt;
There was 1 skipped test:&lt;br /&gt;
1) DependencyFailureTest::testTwo&lt;br /&gt;
This test depends on &amp;quot;DependencyFailureTest::testOne&amp;quot; to pass.&lt;br /&gt;
FAILURES!&lt;br /&gt;
Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.phpunit --verbose DependencyFailureTest&lt;br /&gt;
PHPUnit 3.7.0 by Sebastian Bergmann.&lt;br /&gt;
FS&lt;br /&gt;
Time: 0 seconds, Memory: 5.00Mb&lt;br /&gt;
There was 1 failure:&lt;br /&gt;
1) DependencyFailureTest::testOne&lt;br /&gt;
Failed asserting that false is true.&lt;br /&gt;
/home/sb/DependencyFailureTest.php:6&lt;br /&gt;
There was 1 skipped test:&lt;br /&gt;
1) DependencyFailureTest::testTwo&lt;br /&gt;
This test depends on &amp;quot;DependencyFailureTest::testOne&amp;quot; to pass.&lt;br /&gt;
FAILURES!&lt;br /&gt;
Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
하나의 테스트에 복수의 @depends 주석을 달 수도 있습니다. PHPUnit 은 테스트가 실행되는 순서를 변경하지 않기 때문에, 테스트가 실행될 때 확실하게 의존성을 만족시키도록 할 필요가 있습니다.&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>