<?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%3A14</id>
	<title>PHPUnitManual:14 - 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%3A14"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:14&amp;action=history"/>
	<updated>2026-05-01T18:58:14Z</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:14&amp;diff=3426&amp;oldid=prev</id>
		<title>Onionmixer: PHPUnit 14 Code Coverage 분석 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:14&amp;diff=3426&amp;oldid=prev"/>
		<updated>2013-07-04T09:09:46Z</updated>

		<summary type="html">&lt;p&gt;PHPUnit 14 Code Coverage 분석 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;제14장. Code Coverage 분석&lt;br /&gt;
 	&lt;br /&gt;
:The beauty of testing is found not in the effort but in the effiency.&lt;br /&gt;
&lt;br /&gt;
:테스트의 미학은 들인 노력이 아니라 얼마나 효율적인가 이다.&lt;br /&gt;
:무엇이 테스트되어야 할지를 아는 것, 무엇이 테스트되고 있는지를 아는 것. 중요한 것은 이것이다.&lt;br /&gt;
::--Murali Nandigama&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 장에서는 PHPUnit 의 code coverage 기능에 대해 학습할 것입니다. 이 기능은 테스트를 실행할 때, 코드의 어떤 부분이 실행되었는지를 조사하는 기능입니다. 다음과 같은 질문에 대한 답을 제공할 수 있을 것입니다.&lt;br /&gt;
&lt;br /&gt;
* 테스트되지 않은 코드를 발견하는 방법은 무엇인가? 다시 말하자면 아직 테스트가 만들어지지 (covered) 않은 부분을 발견하기 위한 방법은 무었인가?&lt;br /&gt;
* 테스트의 완전성을 확인하는 방법은 무엇인가?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code coverage 통계의 의미를 예를 들어서 설명하자면, 100줄의 코드로 구성된 메소드가 있는 경우, 테스트에서 실제로 사용된 것이 그 중의 75줄이라면, 해당 메소드의 Code coverage 를 75퍼센트인 것으로 간주하는 것입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PHPUnit 의 Code coverage 분석에서는 PHP_CodeCoverage[http://github.com/sebastianbergmann/php-code-coverage] 컴포넌트를 사용합니다. 이 컴포넌트는 Xdebug[http://www.xdebug.org/] 확장 모듈이 제공하는 statement coverage 기능을 이용합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예12.3 의 BankAccount 클래스에 대한 Code coverage 레포트를 작성해 봅시다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
phpunit --coverage-html ./report BankAccountTest&lt;br /&gt;
PHPUnit 3.7.0 by Sebastian Bergmann.&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Time: 0 seconds&lt;br /&gt;
&lt;br /&gt;
OK (3 tests, 3 assertions)&lt;br /&gt;
&lt;br /&gt;
Generating report, this may take a moment.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Figure 14.1 &amp;quot;setBalance() 의 Code coverage&amp;quot; 는 Code coverage 레포트의 일부를 발췌한 것입니다. 테스트 시에 실행된 행은 녹색으로 강조되어 있습니다. 실행 가능하지만 실행되지 않은 행은 빨간색으로 강조되어 있습니다. 그리고, 회색으로 표시된 행은 &amp;quot;무의미한 코드&amp;quot;입니다. 왼쪽의 숫자는 그 행을 테스트하는 테스트의 숫자입니다.&lt;br /&gt;
&lt;br /&gt;
Figure 14.1. setBalance() 의 Code coverage&lt;br /&gt;
&lt;br /&gt;
[[image:PHPUnit_14.1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BankAccount 의 Code coverage 레포트에서 알 수 있는 것은, setBalance(), depositMoney() 를 호출하는 테스트가 아직 존재하지 않는 것과 withdrawMoney() 를 적절한 인수를 넘기는 테스트가 존재하지 않는 것입니다. BankAccountTest 클래스에 추가할 테스트가 예14.1 &amp;quot;완전한 Code coverage 를 달성하기 위한 추가 테스트&amp;quot; 입니다. 이 테스트를 추가하는 것에 의해, BankAccountTest 클래스의 test case 를 완전히 망라할 수 있게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예14.1 완전한 Code coverage 를 달성하기 위한 추가 테스트&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;
require_once &amp;#039;BankAccount.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
class BankAccountTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
    // ...&lt;br /&gt;
 &lt;br /&gt;
    public function testDepositWithdrawMoney()&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;assertEquals(0, $this-&amp;gt;ba-&amp;gt;getBalance());&lt;br /&gt;
        $this-&amp;gt;ba-&amp;gt;depositMoney(1);&lt;br /&gt;
        $this-&amp;gt;assertEquals(1, $this-&amp;gt;ba-&amp;gt;getBalance());&lt;br /&gt;
        $this-&amp;gt;ba-&amp;gt;withdrawMoney(1);&lt;br /&gt;
        $this-&amp;gt;assertEquals(0, $this-&amp;gt;ba-&amp;gt;getBalance());&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;
Figure 14.2 ?setBalance() 메소드에 테스트를 추가한 뒤의 Code coverage&amp;quot; 는 테스트를 추가한 뒤의 setBalance() 의 Code coverage 입니다.&lt;br /&gt;
&lt;br /&gt;
Figure 14.2 setBalance() 메소드에 테스트를 추가한 뒤의 Code coverage&lt;br /&gt;
&lt;br /&gt;
[[image:PHPUnit_14.2.png]]&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>