phpunit自定义拆解特定于我的测试

时间:2017-01-12 05:19:20

标签: phpunit

我在课堂上有一些特定的测试设置。由于它特定于我的测试,我已将其添加到我的测试功能的顶部。清理将添加到测试功能的末尾。测试失败并且未执行清理时的问题。是否有PHPUnit方法来指定特定于我的测试函数的自定义拆解。我查看了PHPUnit手册,它指定了teardownAfterClass和tearDown,但两者都没有解决我的问题。函数teardownAfterClass将在类的末尾只运行一次。函数拆解在每次测试后运行,但如果我的特定测试函数没有执行,我不想进行任何清理。

为我的测试创建自定义拆卸功能的PHPUnit方法是什么?

这是我用来确保特定于测试的清理总是发生的代码,但它很难看,因为它需要将实际测试放在一个单独的函数中并需要try / catch块。是否有一种PHPUnit特定的方式来处理它?类似于函数的dataProvider之类的东西会很棒,无论失败还是成功,都会在测试后执行。

class testClass  {

    public function test1() {
        self::setupSpecificToTest1();
        try {
            // actual test without cleanup
            $this->_test1();

        } catch (Exception $e) {
            self::cleanupSpecificToTest1();
            throw $e;
        }
        self::cleanupSpecificToTest1();
    }

    public function test2() {
        // some code which does not need any setup or cleanup
    }

    private function _test1() {
        // some test code
    }
}

2 个答案:

答案 0 :(得分:0)

我试过这个,经过我的测试,它对我有用。

public function tearDown()
    {
        $this->webDriver->close();
    }   

答案 1 :(得分:0)

实现智能tearDown(它更接近PHPUnit运行测试的方法)

您可以在tearDown方法中检查特定的测试名称,以相应地改变其行为。获取测试名称可以通过测试类中的$this->getName()完成。

尝试类似:

...
public function test1() { ... }

public function test2() { ... }

public function tearDown()
{
    if ($this->getName() === 'test1')
    {
        // Do clean up specific to test1
    }
    parent::tearDown();
}