国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

4. 基境(fixture)

2018-02-23 16:23 更新

第 4 章?基境(fixture)

在編寫測(cè)試時(shí),最費(fèi)時(shí)的部分之一是編寫代碼來(lái)將整個(gè)場(chǎng)景設(shè)置成某個(gè)已知的狀態(tài),并在測(cè)試結(jié)束后將其復(fù)原到初始狀態(tài)。這個(gè)已知的狀態(tài)稱為測(cè)試的 基境(fixture)

Example?2.1, “用 PHPUnit 測(cè)試數(shù)組操作”中,基境十分簡(jiǎn)單,就是存儲(chǔ)在 $stack 變量中的數(shù)組。然而,絕大多數(shù)時(shí)候基境均遠(yuǎn)比一個(gè)簡(jiǎn)單數(shù)組要復(fù)雜,用于建立基境的代碼量也會(huì)隨之增長(zhǎng)。測(cè)試的真正內(nèi)容就被淹沒(méi)于建立基境帶來(lái)的干擾中。當(dāng)編寫多個(gè)需要類似基境的測(cè)試時(shí)這個(gè)問(wèn)題就變得更糟糕了。如果沒(méi)有來(lái)自于測(cè)試框架的幫助,就不得不在寫每一個(gè)測(cè)試時(shí)都將建立基境的代碼重復(fù)一次。

PHPUnit 支持共享建立基境的代碼。在運(yùn)行某個(gè)測(cè)試方法前,會(huì)調(diào)用一個(gè)名叫 setUp() 的模板方法。setUp() 是創(chuàng)建測(cè)試所用對(duì)象的地方。當(dāng)測(cè)試方法運(yùn)行結(jié)束后,不管是成功還是失敗,都會(huì)調(diào)用另外一個(gè)名叫 tearDown() 的模板方法。tearDown() 是清理測(cè)試所用對(duì)象的地方。

Example?2.2, “用 @depends 標(biāo)注來(lái)表達(dá)依賴關(guān)系”中,我們?cè)跍y(cè)試之間運(yùn)用生產(chǎn)者-消費(fèi)者關(guān)系來(lái)共享基境。這并非總是預(yù)期的方式,甚至有時(shí)是不可能的。Example?4.1, “用 setUp() 建立棧的基境”展示了另外一個(gè)編寫測(cè)試 StackTest 的方式。在這個(gè)方式中,不再重用基境本身,而是重用建立基境的代碼。首先聲明一個(gè)實(shí)例變量,$stack,用來(lái)替代方法內(nèi)的局部變量。然后把 array 基境的建立放到 setUp() 方法中。最后,從測(cè)試方法中去除冗余代碼,在 assertEquals() 斷言方法中使用新引入的實(shí)例變量 $this->stack替代方法內(nèi)的局部變量 $stack。

Example?4.1.?用 setUp() 建立棧的基境

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    protected $stack;

    protected function setUp()
    {
        $this->stack = array();
    }

    public function testEmpty()
    {
        $this->assertTrue(empty($this->stack));
    }

    public function testPush()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', $this->stack[count($this->stack)-1]);
        $this->assertFalse(empty($this->stack));
    }

    public function testPop()
    {
        array_push($this->stack, 'foo');
        $this->assertEquals('foo', array_pop($this->stack));
        $this->assertTrue(empty($this->stack));
    }
}
?>

測(cè)試類的每個(gè)測(cè)試方法都會(huì)運(yùn)行一次 setUp()tearDown() 模板方法(同時(shí),每個(gè)測(cè)試方法都是在一個(gè)全新的測(cè)試類實(shí)例上運(yùn)行的)。

另外,setUpBeforeClass()tearDownAfterClass() 模板方法將分別在測(cè)試用例類的第一個(gè)測(cè)試運(yùn)行之前和測(cè)試用例類的最后一個(gè)測(cè)試運(yùn)行之后調(diào)用。

下面這個(gè)例子中展示了測(cè)試用例類中所有可用的模板方法。

Example?4.2.?展示所有可用模板方法的例子

<?php
class TemplateMethodsTest extends PHPUnit_Framework_TestCase
{
    public static function setUpBeforeClass()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    protected function setUp()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    protected function assertPreConditions()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    public function testOne()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
        $this->assertTrue(TRUE);
    }

    public function testTwo()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
        $this->assertTrue(FALSE);
    }

    protected function assertPostConditions()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    protected function tearDown()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    public static function tearDownAfterClass()
    {
        fwrite(STDOUT, __METHOD__ . "\n");
    }

    protected function onNotSuccessfulTest(Exception $e)
    {
        fwrite(STDOUT, __METHOD__ . "\n");
        throw $e;
    }
}
?>
phpunit TemplateMethodsTest

PHPUnit 5.0.0 by Sebastian Bergmann and contributors.

TemplateMethodsTest::setUpBeforeClass
TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testOne
TemplateMethodsTest::assertPostConditions
TemplateMethodsTest::tearDown
.TemplateMethodsTest::setUp
TemplateMethodsTest::assertPreConditions
TemplateMethodsTest::testTwo
TemplateMethodsTest::tearDown
TemplateMethodsTest::onNotSuccessfulTest
FTemplateMethodsTest::tearDownAfterClass

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) TemplateMethodsTest::testTwo
Failed asserting that <boolean:false> is true.
/home/sb/TemplateMethodsTest.php:30

FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)