PHPUnit TDD,PHP致命错误:调用未定义的方法

时间:2011-03-17 13:45:23

标签: php tdd phpunit undefined

我正在使用PHPUnit启动一个TDD项目,这确实让我感到困惑。

似乎只要不实现所有类和方法,所有测试都无法运行。 如果尚未实现类或方法,如何才能使测试继续事件?

感谢。

编辑: “在编写测试时,你的测试套件失败了TDD的意义吗?” 是的,当然,但我希望全球范围内看到这个项目。 假设我们已经编写了1000个测试,并且第一个运行会产生致命的错误。 但是,当我们来实现代码时,我们并不幸运,那部分将是最后实现的部分之一。我不想开发“盲目”,只有在能够清除所有致命错误时才能运行我的测试套件。

所以是的,他们在失败的测试和停止/死亡的整个测试过程之间存在巨大的差异,因为这种状态下的致命错误是正常的。

作为一个工作环节,我们在开始编写测试之前创建了我们的类骨架。

1 个答案:

答案 0 :(得分:5)

在编写测试时,你的测试套件失败了TDD的意义吗?

我想你的观点是,它会因致命错误而死,而不是只显示红色的“我失败”栏。非常有意思的一点,我正在使用phpunit进行TDD,但从来没有让我烦恼过。

首先要考虑的是--process-isolation

实施例

让我们假设一个看起来像这样的测试类:

<?php

class fooTest extends PHPUnit_Framework_TestCase {

    public function testA() {
        $x = new a();
    }

    public function testB() {
        $this->assertTrue(true);
    }
}

使用普通跑步者phpunit test.php

PHPUnit 3.5.12 by Sebastian Bergmann.

Fatal error: Class 'a' not found in /home/mcsvnls/mep.php on line 6

但使用phpunit --process-isolation test.php开关时,它看起来像这样:

PHPUnit 3.5.12 by Sebastian Bergmann.

E.

Time: 1 second, Memory: 3.25Mb

There was 1 error:

1) fooTest::testA
RuntimeException: Fatal error: Class 'a' not found in /home/foo/mep.php on line 6

Call Stack:
    0.0005     102364   1. {main}() /home/foo/-:0
    0.0341    1768644   2. __phpunit_run_isolated_test() /home/foo/-:143
    [...........]

FAILURES!
Tests: 2, Assertions: 1, Errors: 1.

现在第二个测试已执行并通过