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

PHPUnit TDD,PHP致命错误:调用未定义的方法,php,tdd,phpunit,undefined,Php,Tdd,Phpunit,Undefined,我正在启动一个使用PHPUnit的TDD项目,有些东西真的让我很烦 似乎只要所有的类和方法都没有实现,所有的测试就不能运行。 如果类或方法尚未实现,如何使测试继续事件 谢谢 编辑: TDD的意义不在于您的测试套件在编写测试时失败吗? 是的,当然,但我想对这个项目有一个全球视野。 假设我们已经编写了1000个测试,第一个运行的测试出现了致命错误。 但我们并不幸运,当我们开始实现代码时,这部分将是最后要实现的部分之一。我不想开发盲测试,只有在清除所有致命错误后才能运行我的测试套件 因此,是的,测试失

我正在启动一个使用PHPUnit的TDD项目,有些东西真的让我很烦

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

谢谢

编辑: TDD的意义不在于您的测试套件在编写测试时失败吗? 是的,当然,但我想对这个项目有一个全球视野。 假设我们已经编写了1000个测试,第一个运行的测试出现了致命错误。 但我们并不幸运,当我们开始实现代码时,这部分将是最后要实现的部分之一。我不想开发盲测试,只有在清除所有致命错误后才能运行我的测试套件

因此,是的,测试失败与整个测试过程因致命错误而停止/死亡之间存在巨大差异,在这种状态下这是正常的


作为一项工作,我们在开始编写测试之前创建了我们的类框架。

TDD的要点不就是您的测试套件在编写测试时失败了吗

我想你的观点是,它死在一个致命的错误,而不是仅仅显示红色的我失败了酒吧。非常有趣的一点是,我正在用phpunit做TDD,但这从来没有让我感到困扰

首先想到的是进程隔离

例子: 让我们假设一个测试类如下所示:

<?php

class fooTest extends PHPUnit_Framework_TestCase {

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

    public function testB() {
        $this->assertTrue(true);
    }
}
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.
但是当使用phpunit-process isolation test.php开关时,它看起来是这样的:

<?php

class fooTest extends PHPUnit_Framework_TestCase {

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

    public function testB() {
        $this->assertTrue(true);
    }
}
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.

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

谢谢,这就可以了!