<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=PhpUnit_with_PHP</id>
	<title>PhpUnit with PHP - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://workspace.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=PhpUnit_with_PHP"/>
	<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=PhpUnit_with_PHP&amp;action=history"/>
	<updated>2026-04-21T08:24:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://workspace.onionmixer.net/wiki/index.php?title=PhpUnit_with_PHP&amp;diff=400&amp;oldid=prev</id>
		<title>Onionmixer: 페이지 내용 추가 - bootstrap 관련</title>
		<link rel="alternate" type="text/html" href="https://workspace.onionmixer.net/wiki/index.php?title=PhpUnit_with_PHP&amp;diff=400&amp;oldid=prev"/>
		<updated>2013-05-24T08:12:43Z</updated>

		<summary type="html">&lt;p&gt;페이지 내용 추가 - bootstrap 관련&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;gentoo의 php에서 phpUnit을 설치하고 테스트하는방법&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==관련자료==&lt;br /&gt;
&lt;br /&gt;
* phpUnit :: https://github.com/sebastianbergmann/phpunit/&lt;br /&gt;
* php :: http://php.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==개요==&lt;br /&gt;
&lt;br /&gt;
phpUnit 은 php를 이용해서 진행하는 프로젝트에 대한 Unit test 를 진행할 수 있는 프레임웍이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==설치::portage==&lt;br /&gt;
&lt;br /&gt;
gentoo에서 phpUnit의 portage가 있기는 하지만 이를 사용하면 설치되는 파일이 적기때문에 pear를 사용해도 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
file:///etc/make.conf&lt;br /&gt;
&lt;br /&gt;
PHP_TARGETS=&amp;quot;php5-4&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래의 패키지를 설치할때 주의점이 있다. phpunit의 경우는 PHP_TARGETS 를 설정해주어야 한다. gentoo에서 make.conf 파일에 다음과같은 설정을 넣어준다. 물론 사용하는 php 버전에 맞춰주면 된다.&lt;br /&gt;
&lt;br /&gt;
다만 여기서 우리는 gentoo를 사용하는것으로 되어있기때문에 일단은 portage를 이용해서 설치하는 방법으로 진행해보도록 한다. 아래의 패키지들을 설치하도록 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
dev-php/Text_Template&lt;br /&gt;
dev-php/PHPUnit_MockObject&lt;br /&gt;
dev-php/pecl-yaml&lt;br /&gt;
dev-php/PHP_CodeCoverage&lt;br /&gt;
dev-php/phpunit/phpunit-3.7.19.ebuild&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
내가 사용하고 있는 php 버전에 맞춘 패키지들을 설치하면 이제 phpunit 을 사용할 준비는 끝난상태로 보면 된다&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==설치::pear==&lt;br /&gt;
&lt;br /&gt;
pear를 사용하기 위해서는 일단 pear를 설치해야한다. 다음의 명령어로 pear를 설치한다. (물론 php는 설치되어 있어야 한다)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ emerge dev-php/pear&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pear는 ruby의 gems 같은 php의 패키지 매니저이다.&lt;br /&gt;
&lt;br /&gt;
pear를 이용해서 phpunit 을 설치하는 방법은 대단히 간단하다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/sebastianbergmann/phpunit/ 이 페이지] 를 참고하면 간단한 설치법을 발견할 수 있다. 아래와같이 진행하면 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pear config-set auto_discover 1&lt;br /&gt;
$ pear install pear.phpunit.de/PHPUnit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
설치한 phpunit 에 대한 패키지 목록은 다음과같은 명령어로 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pear list -a&lt;br /&gt;
..........&lt;br /&gt;
..........&lt;br /&gt;
Installed packages, channel pear.phpunit.de:&lt;br /&gt;
============================================&lt;br /&gt;
Package            Version State&lt;br /&gt;
File_Iterator      1.3.3   stable&lt;br /&gt;
PHPUnit_MockObject 1.2.3   stable&lt;br /&gt;
PHP_CodeCoverage   1.2.9   stable&lt;br /&gt;
PHP_Timer          1.0.4   stable&lt;br /&gt;
PHP_TokenStream    1.1.5   stable&lt;br /&gt;
Text_Template      1.1.4   stable&lt;br /&gt;
&lt;br /&gt;
Installed packages, channel pear.symfony.com:&lt;br /&gt;
=============================================&lt;br /&gt;
Package Version State&lt;br /&gt;
Yaml    2.2.1   stable&lt;br /&gt;
..........&lt;br /&gt;
..........&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pear 를 이용해서 설치한 패키지의 uninstall 은 다음과 같은 과정을 거치면 된다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pear uninstall pear.phpunit.de/PHPUnit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위의 예제를 보면 알 수 있듯이 지울때는 channel 이름까지 같이 적어줘야한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==테스트::gentoo==&lt;br /&gt;
&lt;br /&gt;
phpUnit 의 기본적인 테스트방법은 MockObject 를 이용한 테스트를 진행하게 된다. portage를 사용하게되면 다음의 경로에 설치되게 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/share/php/PHPUnit/Framework/MockObject&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이를 이용해서 기본 테스트를 진행할 php 코드는 다음과같다.&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;/usr/share/php/PHPUnit/Framework/MockObject/Autoload.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
class TestTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
        public function testFoobar()&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;
&lt;br /&gt;
위의 php코드를 파일로 저장하고 console 상에서 다음과 같은 방법으로 테스트를 진행한다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ phpunit 테스트할 파일이름&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
테스트를 진행하면 다음과같은 결과를 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ phpunit sample_phpunit.php &lt;br /&gt;
PHPUnit 3.7.19 by Sebastian Bergmann.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Time: 0 seconds, Memory: 3.25Mb&lt;br /&gt;
&lt;br /&gt;
OK (1 test, 0 assertions)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위와같은 결과를 확인하면 phpunit 이 정상적으로 작동된다고 봐도 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==테스트::pear==&lt;br /&gt;
&lt;br /&gt;
pear를 사용해서 MockObject 를 설치하는경우는 다음의 경로에 저장되게 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/share/php/PHPUnit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이를 이용해서 기본 테스트를 진행할 php 코드는 다음과같다.&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;/usr/share/php/PHPUnit/Autoload.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
class TestTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
        public function testFoobar()&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;
&lt;br /&gt;
위의 php코드를 파일로 저장하고 console 상에서 다음과 같은 방법으로 테스트를 진행한다&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ phpunit 테스트할 파일이름&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
테스트를 진행하면 다음과같은 결과를 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ phpunit sample_phpunit.php &lt;br /&gt;
PHPUnit 3.7.19 by Sebastian Bergmann.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Time: 0 seconds, Memory: 3.25Mb&lt;br /&gt;
&lt;br /&gt;
OK (1 test, 0 assertions)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위와같은 결과를 확인하면 phpunit 이 정상적으로 작동된다고 봐도 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PHPUnit 테스트를 위한 bootstrap 작성==&lt;br /&gt;
&lt;br /&gt;
PHPUnit 의 test에 있어 보다 많은 부분을 테스트 대상으로 만들기 위해서는 test의 대상이 되는 함수에서 필요한 환경변수나 기본 준비등을 담고있는 파일이 있어야 한다.&lt;br /&gt;
&lt;br /&gt;
그 파일을 &amp;#039;&amp;#039;&amp;#039;bootstrap&amp;#039;&amp;#039;&amp;#039; 이라고 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일단 CodeIgnite 3.0 (beta)버전의 phpunit.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; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;phpunit&lt;br /&gt;
        bootstrap=&amp;quot;./Bootstrap.php&amp;quot;&lt;br /&gt;
        colors=&amp;quot;true&amp;quot;&lt;br /&gt;
        convertNoticesToExceptions=&amp;quot;true&amp;quot;&lt;br /&gt;
        convertWarningsToExceptions=&amp;quot;true&amp;quot;&lt;br /&gt;
        stopOnError=&amp;quot;false&amp;quot;&lt;br /&gt;
        stopOnFailure=&amp;quot;false&amp;quot;&lt;br /&gt;
        stopOnIncomplete=&amp;quot;false&amp;quot;&lt;br /&gt;
        stopOnSkipped=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;testsuites&amp;gt;&lt;br /&gt;
                &amp;lt;testsuite name=&amp;quot;CodeIgniter Core Test Suite&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;test.php&amp;quot;&amp;gt;./codeigniter/core&amp;lt;/directory&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;test.php&amp;quot;&amp;gt;./codeigniter/helpers&amp;lt;/directory&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;test.php&amp;quot;&amp;gt;./codeigniter/libraries&amp;lt;/directory&amp;gt;&lt;br /&gt;
                &amp;lt;/testsuite&amp;gt;&lt;br /&gt;
        &amp;lt;/testsuites&amp;gt;&lt;br /&gt;
        &amp;lt;filter&amp;gt;&lt;br /&gt;
                &amp;lt;blacklist&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;.php&amp;quot;&amp;gt;PEAR_INSTALL_DIR&amp;lt;/directory&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;.php&amp;quot;&amp;gt;PHP_LIBDIR&amp;lt;/directory&amp;gt;&lt;br /&gt;
                        &amp;lt;directory suffix=&amp;quot;.php&amp;quot;&amp;gt;../vendor&amp;lt;/directory&amp;gt;&lt;br /&gt;
                &amp;lt;/blacklist&amp;gt;&lt;br /&gt;
        &amp;lt;/filter&amp;gt;&lt;br /&gt;
&amp;lt;/phpunit&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
위의 xml 파일의 내용을 보면 &amp;#039;&amp;#039;&amp;#039;bootstrap=&amp;quot;./Bootstrap.php&amp;quot;&amp;#039;&amp;#039;&amp;#039; 이라는 부분이 있다. 그럼 &amp;#039;&amp;#039;&amp;#039;Bootstrap.php&amp;#039;&amp;#039;&amp;#039; 파일의 내용을 가볍게 보도록 하자.&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;
&lt;br /&gt;
// Errors on full!&lt;br /&gt;
ini_set(&amp;#039;display_errors&amp;#039;, 1);&lt;br /&gt;
error_reporting(E_ALL | E_STRICT);&lt;br /&gt;
&lt;br /&gt;
$dir = realpath(dirname(__FILE__));&lt;br /&gt;
&lt;br /&gt;
// Path constants&lt;br /&gt;
defined(&amp;#039;PROJECT_BASE&amp;#039;) OR define(&amp;#039;PROJECT_BASE&amp;#039;, realpath($dir.&amp;#039;/../&amp;#039;).&amp;#039;/&amp;#039;);&lt;br /&gt;
defined(&amp;#039;SYSTEM_PATH&amp;#039;) OR define(&amp;#039;SYSTEM_PATH&amp;#039;, PROJECT_BASE.&amp;#039;system/&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
// Get vfsStream either via PEAR or composer&lt;br /&gt;
foreach (explode(PATH_SEPARATOR, get_include_path()) as $path)&lt;br /&gt;
{&lt;br /&gt;
        if (file_exists($path.DIRECTORY_SEPARATOR.&amp;#039;vfsStream/vfsStream.php&amp;#039;))&lt;br /&gt;
        {&lt;br /&gt;
                require_once &amp;#039;vfsStream/vfsStream.php&amp;#039;;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if ( ! class_exists(&amp;#039;vfsStream&amp;#039;) &amp;amp;&amp;amp; file_exists(PROJECT_BASE.&amp;#039;vendor/autoload.php&amp;#039;))&lt;br /&gt;
{&lt;br /&gt;
        include_once PROJECT_BASE.&amp;#039;vendor/autoload.php&amp;#039;;&lt;br /&gt;
        class_alias(&amp;#039;org\bovigo\vfs\vfsStream&amp;#039;, &amp;#039;vfsStream&amp;#039;);&lt;br /&gt;
        class_alias(&amp;#039;org\bovigo\vfs\vfsStreamDirectory&amp;#039;, &amp;#039;vfsStreamDirectory&amp;#039;);&lt;br /&gt;
        class_alias(&amp;#039;org\bovigo\vfs\vfsStreamWrapper&amp;#039;, &amp;#039;vfsStreamWrapper&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Define CI path constants to VFS (filesystem setup in CI_TestCase::setUp)&lt;br /&gt;
defined(&amp;#039;BASEPATH&amp;#039;) OR define(&amp;#039;BASEPATH&amp;#039;, vfsStream::url(&amp;#039;system/&amp;#039;));&lt;br /&gt;
defined(&amp;#039;APPPATH&amp;#039;) OR define(&amp;#039;APPPATH&amp;#039;, vfsStream::url(&amp;#039;application/&amp;#039;));&lt;br /&gt;
defined(&amp;#039;VIEWPATH&amp;#039;) OR define(&amp;#039;VIEWPATH&amp;#039;, APPPATH.&amp;#039;views/&amp;#039;);&lt;br /&gt;
defined(&amp;#039;ENVIRONMENT&amp;#039;) OR define(&amp;#039;ENVIRONMENT&amp;#039;, &amp;#039;development&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
// Set localhost &amp;quot;remote&amp;quot; IP&lt;br /&gt;
isset($_SERVER[&amp;#039;REMOTE_ADDR&amp;#039;]) OR $_SERVER[&amp;#039;REMOTE_ADDR&amp;#039;] = &amp;#039;127.0.0.1&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Prep our test environment&lt;br /&gt;
include_once $dir.&amp;#039;/mocks/core/common.php&amp;#039;;&lt;br /&gt;
include_once SYSTEM_PATH.&amp;#039;core/Common.php&amp;#039;;&lt;br /&gt;
include_once $dir.&amp;#039;/mocks/autoloader.php&amp;#039;;&lt;br /&gt;
spl_autoload_register(&amp;#039;autoload&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
unset($dir);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위와같은 내용이 Bootstrap.php 파일안에 들어있다. 잘보면 개부분이 변수 또는 include 해야하는 내용에 국한되어있다.&lt;br /&gt;
&lt;br /&gt;
bootstrap에서 주의할점은 맨 아래부분이 &amp;#039;&amp;#039;&amp;#039;?&amp;gt;&amp;#039;&amp;#039;&amp;#039; 기호로 끝나지 않는다는 점에 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
bootstrap의 작성에 대한 더 많은 내용은 아래의 주소를 참고하도록 한다.(netbeans와 관련된 얘기기는 하지만.... 어차피 중요한 내용은 그게 아니니)&lt;br /&gt;
&lt;br /&gt;
{{arrowStyle|http://www.jamesfairhurst.co.uk/posts/view/codeigniter_phpunit_and_netbeans}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==참고문서==&lt;br /&gt;
&lt;br /&gt;
* PHPUnit 설치 :: http://xinics.tistory.com/entry/PHPUnit-%EC%84%A4%EC%B9%98&lt;br /&gt;
* PHPUnit 홈페이지 :: https://github.com/sebastianbergmann/phpunit/&lt;br /&gt;
* Selenium 설치 및 사용법 :: http://xinics.tistory.com/entry/Selenium-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95&lt;br /&gt;
* Xdebug를 이용한 PHP 디버그 :: http://xinics.tistory.com/72&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>