<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 對文件系統進行模仿 [vfsStream](https://github.com/mikey179/vfsStream) 是對[虛擬文件系統](http://en.wikipedia.org/wiki/Virtual_file_system) 的 [流包覆器(stream wrapper)](http://www.php.net/streams),可以用于模仿真實文件系統,在單元測試中可能會有所助益。 如果使用 [Composer](https://getcomposer.org/) 來管理項目的依賴關系,那么只需簡單的在項目的 `composer.json` 文件中加一條對 `mikey179/vfsStream` 的依賴關系即可。以下是一個最小化的 `composer.json`文件例子,只定義了一條對 PHPUnit 4.6 與 vfsStream 的開發時(development-time)依賴: ~~~ { "require-dev": { "phpunit/phpunit": "~4.6", "mikey179/vfsStream": "~1" } } ~~~ [Example?9.21, “一個與文件系統交互的類”](# "Example?9.21.?一個與文件系統交互的類")展示了一個與文件系統交互的類。 **Example?9.21.?一個與文件系統交互的類** ~~~ <?php class Example { protected $id; protected $directory; public function __construct($id) { $this->id = $id; } public function setDirectory($directory) { $this->directory = $directory . DIRECTORY_SEPARATOR . $this->id; if (!file_exists($this->directory)) { mkdir($this->directory, 0700, TRUE); } } }?> ~~~ 如果不使用諸如 vfsStream 這樣的虛擬文件系統,就無法在隔離外部影響的情況下對 `setDirectory()` 方法進行測試(參見 [Example?9.22, “對一個與文件系統交互的類進行測試”](# "Example?9.22.?對一個與文件系統交互的類進行測試"))。 **Example?9.22.?對一個與文件系統交互的類進行測試** ~~~ <?php require_once 'Example.php'; class ExampleTest extends PHPUnit_Framework_TestCase { protected function setUp() { if (file_exists(dirname(__FILE__) . '/id')) { rmdir(dirname(__FILE__) . '/id'); } } public function testDirectoryIsCreated() { $example = new Example('id'); $this->assertFalse(file_exists(dirname(__FILE__) . '/id')); $example->setDirectory(dirname(__FILE__)); $this->assertTrue(file_exists(dirname(__FILE__) . '/id')); } protected function tearDown() { if (file_exists(dirname(__FILE__) . '/id')) { rmdir(dirname(__FILE__) . '/id'); } } } ?> ~~~ 上面的方法有幾個缺點: - 和任何其他外部資源一樣,文件系統可能會間歇性的出現一些問題,這使得和它交互的測試變得不可靠。 - 在 `setUp()` 和 `tearDown()` 方法中,必須確保這個目錄在測試前和測試后均不存在。 - 如果測試在 `tearDown()` 方法被調用之前就終止了,這個目錄就會遺留在文件系統中。 [Example?9.23, “在對與文件系統交互的類進行的測試中模仿文件系統”](# "Example?9.23.?在對與文件系統交互的類進行的測試中模仿文件系統")展示了如何在對與文件系統交互的類進行的測試中使用 vfsStream 來模仿文件系統。 **Example?9.23.?在對與文件系統交互的類進行的測試中模仿文件系統** ~~~ <?php require_once 'vfsStream/vfsStream.php'; require_once 'Example.php'; class ExampleTest extends PHPUnit_Framework_TestCase { public function setUp() { vfsStreamWrapper::register(); vfsStreamWrapper::setRoot(new vfsStreamDirectory('exampleDir')); } public function testDirectoryIsCreated() { $example = new Example('id'); $this->assertFalse(vfsStreamWrapper::getRoot()->hasChild('id')); $example->setDirectory(vfsStream::url('exampleDir')); $this->assertTrue(vfsStreamWrapper::getRoot()->hasChild('id')); } } ?> ~~~ 這有幾個優點: - 測試本身更加簡潔。 - vfsStream 讓開發者能夠完全控制被測代碼所處的文件系統環境。 - 由于文件系統操作不再對真實文件系統進行操作,`tearDown()` 方法中的清理操作不再需要了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看