PHPUnit-装置-setUp和tearDown

时间:2020-02-23 14:42:03  来源:igfitidea点击:

在本教程中,我们将学习PHPUnit中的装置。

在Hello World Test教程中,我们了解了如何编写基本测试。
我们还看到了使用" assertEquals()"方法。

现在,让我们谈谈PHPUnit中的装置。

什么是夹具(fixture)?

夹具(fixture)是执行测试时应用程序的初始状态。

设置和拆卸

在PHPUnit测试中,我们有setUp()方法,该方法在每次测试之前都会被调用。
而且我们有tearDown()方法,该方法在每次测试后都会被调用。

我们使用setUp()方法来初始化变量,打开文件连接等,这将为测试做好准备。
在完成测试后,我们使用tearDown()方法取消设置变量,关闭文件连接等。

在大多数情况下,我们将比tearDown()方法更多地使用setUp()方法。

在以下示例中,我们正在测试奇/偶数。
我们的测试方法是testOdd()testEven()
我们还有在每个测试之前执行的setUp()方法和在每个测试之后执行的tearDown()方法。

<?php

class OddEvenTest extends PHPUnit_Framework_TestCase
{
    private $number;

    protected function setUp()
    {
        $this->number = 2;
    }

    public function testOdd()
    {
        $this->number++;
        $this->assertNotEquals(0, $this->number % 2);
    }

    public function testEven()
    {
        $this->assertEquals(0, $this->number % 2);
    }

    protected function tearDown()
    {
        $this->number = null;
    }
}

在上面的代码中,我们有一个私有变量$number。
在setUp()方法中,我们将值2分配给变量$number。

对于奇数测试:

在testOdd()方法内部,我们使用递增运算符++将$number的值增加1,因此,新值是3。
接下来,我们将检查$number除以的余数。
2使用assertNotEquals()方法。

AssertNotEquals()方法采用两个参数。
第一个参数是期望值,第二个参数是我们要检查的值。
将3除以2后,我们得到1的余数,该余数不等于0,因此," assertNotEquals()"方法为我们提供了成功的测试结果。

对于均匀测试:

在" testEven()"方法内部,我们正在使用" assertEquals()"方法检查将" $number"除以2的余数。

AssertEquals()方法采用两个参数。
第一个参数是期望值,第二个参数是我们要检查的值。
将2除以2后,我们得到0等于0的余数,因此," assertEquals()"方法为我们提供了成功的测试结果。

tearDown()方法中,我们只是将$number的值设置为null

Testing started at 1:42 PM ...
PHPUnit 5.7.23 by Sebastian Bergmann and contributors.

Method: OddEvenTest::setUp
Method: OddEvenTest::testOdd
Method: OddEvenTest::tearDown
Method: OddEvenTest::setUp
Method: OddEvenTest::testEven
Method: OddEvenTest::tearDown

Time: 64 ms, Memory: 4.00MB

OK (2 tests, 2 assertions)

Process finished with exit code 0

从上面的输出中,我们可以看到有2个测试并且都成功。

setUpBeforeClass和tearDownAfterClass

在执行第一个测试之前,将调用setUpBeforeClass()方法,在执行最后一个测试之后,将调用tearDownAfterClass()方法。

我们使用这两种方法与所有测试共享设置。

例如,明智的做法是在setUpBeforeClass()方法中获得一次数据库连接,然后在setUp()方法中多次获得连接。

同样,明智的做法是,在" tearDownAfterClass()"方法中仅关闭一次数据库连接,然后在" tearDown()"方法中的每次测试后关闭数据库连接。

因此,基本上,我们只创建一次数据库连接,然后在每次测试中重复使用该连接。
这有助于更快地运行测试。