【问题标题】:phpunit custom teardown specific to my test特定于我的测试的 phpunit 自定义拆解
【发布时间】:2017-01-12 05:19:20
【问题描述】:

我有一些特定于我在课堂上的测试的设置。由于它特定于我的测试,因此我已将其添加到我的测试函数的顶部。清理被添加到测试函数的末尾。测试失败且清理未执行时的问题。是否有一种 PHPUnit 方法来指定特定于我的测试函数的自定义拆解。我查看了指定 teardownAfterClass 和 tearDown 的 PHPUnit 手册,但两者都没有解决我的问题。函数 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
    }
}

【问题讨论】:

  • 对于每个测试的特定行为,您最好在方法本身中处理它,或者只是手动调用清理方法。
  • 函数末尾手动调用cleanup方法的问题是异常/测试失败时无法调用。
  • 我建议您发布一些测试代码,因为可能有更好的方法来处理您的情况。
  • 我添加了一个示例代码来更好地解释问题

标签: phpunit


【解决方案1】:

实现智能拆解(更接近 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();
}

【讨论】:

    【解决方案2】:

    我试过这个,测试后对我有用。

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

    【讨论】:

    • 这将在每次测试后执行。有没有办法仅在特定测试后执行拆卸
    • 您可以在测试后调用此方法,就像在特定事件触发后一样。
    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2018-11-28
    • 2019-10-22
    • 2020-05-06
    • 2016-02-26
    • 2016-10-29
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多