<?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%3A10.4</id>
	<title>PHPUnitManual:10.4 - 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%3A10.4"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:10.4&amp;action=history"/>
	<updated>2026-05-02T10:57:22Z</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:10.4&amp;diff=3414&amp;oldid=prev</id>
		<title>Onionmixer: PHPUnit 10.4 파일 시스템의 mock 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=PHPUnitManual:10.4&amp;diff=3414&amp;oldid=prev"/>
		<updated>2013-07-02T13:30:34Z</updated>

		<summary type="html">&lt;p&gt;PHPUnit 10.4 파일 시스템의 mock 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;10.4 파일 시스템의 mock&lt;br /&gt;
&lt;br /&gt;
vfsStream[https://github.com/mikey179/vfsStream] 은 가상 파일 시스템[http://en.wikipedia.org/wiki/Virtual_file_system]용의 stream wrapper[http://www.php.net/streams] 로, 단위 테스트에서 실제 파일 시스템의 mock 를 생성할 때 유용합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vfsStream 을 인스톨하기 위해서, 로컬 PEAR 환경에 배포 PEAR 채널 (pear.bovigo.org) 을 등록해야 합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
localhost# pear channel-discover pear.bovigo.org&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이 작업은 최초 한 번만 실행하면 됩니다. 이제 PEAR 인스톨러를 사용하여 vfsStream 을 인스톨할 수 있게 되었습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pear install bovigo/vfsStream-beta&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예10.17 &amp;quot;파일 시스템을 조작하는 클래스&amp;quot; 는 파일 시스템을 조작하는 시스템의 예입니다.&lt;br /&gt;
&lt;br /&gt;
예10.17 파일 시스템을 조작하는 클래스&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 Example&lt;br /&gt;
{&lt;br /&gt;
    protected $id;&lt;br /&gt;
    protected $directory;&lt;br /&gt;
 &lt;br /&gt;
    public function __construct($id)&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;id = $id;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function setDirectory($directory)&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;directory = $directory . DIRECTORY_SEPARATOR . $this-&amp;gt;id;&lt;br /&gt;
 &lt;br /&gt;
        if (!file_exists($this-&amp;gt;directory)) {&lt;br /&gt;
            mkdir($this-&amp;gt;directory, 0700, TRUE);&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;
vfsStream 과 같은 가상 파일 시스템이 없다면, 외부에 영향을 끼치지 않고 setDirectory() 메소드를 개별적으로 테스트할 수 없습니다 ( 예10.18 파일 시스템을 조작하는 클래스의 테스트).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예10.18 파일 시스템을 조작하는 클래스의 테스트&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;Example.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
class ExampleTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
    protected function setUp()&lt;br /&gt;
    {&lt;br /&gt;
        if (file_exists(dirname(__FILE__) . &amp;#039;/id&amp;#039;)) {&lt;br /&gt;
            rmdir(dirname(__FILE__) . &amp;#039;/id&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testDirectoryIsCreated()&lt;br /&gt;
    {&lt;br /&gt;
        $example = new Example(&amp;#039;id&amp;#039;);&lt;br /&gt;
        $this-&amp;gt;assertFalse(file_exists(dirname(__FILE__) . &amp;#039;/id&amp;#039;));&lt;br /&gt;
 &lt;br /&gt;
        $example-&amp;gt;setDirectory(dirname(__FILE__));&lt;br /&gt;
        $this-&amp;gt;assertTrue(file_exists(dirname(__FILE__) . &amp;#039;/id&amp;#039;));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    protected function tearDown()&lt;br /&gt;
    {&lt;br /&gt;
        if (file_exists(dirname(__FILE__) . &amp;#039;/id&amp;#039;)) {&lt;br /&gt;
            rmdir(dirname(__FILE__) . &amp;#039;/id&amp;#039;);&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;
이 방식은 다음과 같은 문제를 가지고 있습니다.&lt;br /&gt;
&lt;br /&gt;
* 외부의 리소스를 사용하기 때문에 파일 시스템의 테스트가 연속성을 가지지 못 할 가능성이 있습니다. 그 결과 테스트의 결과를 신용할 수 없어집니다.&lt;br /&gt;
* setUp() 과 tearDown() 메소드를 통해 테스트 전후에 해당 디렉토리가 존재하지 않음을 확인해야 합니다.&lt;br /&gt;
* tearDown() 메소드를 실행하기 전에 테스트가 중단된 경우, 파일 시스템에 디렉토리가 남게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예10.19 &amp;quot;파일 시스템을 조작하는 클래스의 테스트에 필요한 파일 시스템의 mock 생성&amp;quot; 은 vfsStream 을 사용하여 파일 시스템의 mock 를 생성하여 파일 시스템을 조작하는 클래스를 테스트하는 예입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
예10.19 파일 시스템을 조작하는 클래스의 테스트에 필요한 파일 시스템의 mock 생성&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;vfsStream/vfsStream.php&amp;#039;;&lt;br /&gt;
require_once &amp;#039;Example.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
class ExampleTest extends PHPUnit_Framework_TestCase&lt;br /&gt;
{&lt;br /&gt;
    public function setUp()&lt;br /&gt;
    {&lt;br /&gt;
        vfsStreamWrapper::register();&lt;br /&gt;
        vfsStreamWrapper::setRoot(new vfsStreamDirectory(&amp;#039;exampleDir&amp;#039;));&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public function testDirectoryIsCreated()&lt;br /&gt;
    {&lt;br /&gt;
        $example = new Example(&amp;#039;id&amp;#039;);&lt;br /&gt;
        $this-&amp;gt;assertFalse(vfsStreamWrapper::getRoot()-&amp;gt;hasChild(&amp;#039;id&amp;#039;));&lt;br /&gt;
 &lt;br /&gt;
        $example-&amp;gt;setDirectory(vfsStream::url(&amp;#039;exampleDir&amp;#039;));&lt;br /&gt;
        $this-&amp;gt;assertTrue(vfsStreamWrapper::getRoot()-&amp;gt;hasChild(&amp;#039;id&amp;#039;));&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;
이 방식은 다음과 같은 이점을 가집니다.&lt;br /&gt;
&lt;br /&gt;
* 테스트가 간결해집니다.&lt;br /&gt;
* vfsStream 을 준비하는 테스트 대상 코드가 조작하는 파일 시스템 환경을 개발자는 자유롭게 사용할 수 있습니다.&lt;br /&gt;
* 실제 파일 시스템을 조작하지 않기 때문에, tearDown() 메소드를 사용한 후처리가 필요 없습니다.&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>