我正在使用PHPUnit启动一个TDD项目,这确实让我感到困惑。
似乎只要不实现所有类和方法,所有测试都无法运行。 如果尚未实现类或方法,如何才能使测试继续事件?
感谢。
编辑: “在编写测试时,你的测试套件失败了TDD的意义吗?” 是的,当然,但我希望全球范围内看到这个项目。 假设我们已经编写了1000个测试,并且第一个运行会产生致命的错误。 但是,当我们来实现代码时,我们并不幸运,那部分将是最后实现的部分之一。我不想开发“盲目”,只有在能够清除所有致命错误时才能运行我的测试套件。
所以是的,他们在失败的测试和停止/死亡的整个测试过程之间存在巨大的差异,因为这种状态下的致命错误是正常的。
作为一个工作环节,我们在开始编写测试之前创建了我们的类骨架。
答案 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.
现在第二个测试已执行并通过