【问题标题】:PHPUnit TDD, PHP Fatal error: Call to undefined methodPHPUnit TDD,PHP 致命错误:调用未定义的方法
【发布时间】:2011-07-17 10:16:10
【问题描述】:

我正在使用 PHPUnit 开始一个 TDD 项目,但有些事情真的让我很头疼。

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

谢谢。

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

所以是的,在失败的测试和由于在这种状态下正常的致命错误而导致整个测试过程停止/终止之间存在巨大差异。

作为一种工作方式,我们在开始编写测试之前创建了类骨架。

【问题讨论】:

    标签: php tdd phpunit undefined


    【解决方案1】:

    您的测试套件在编写测试时失败不是 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.
    

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

    【讨论】:

    • 谢谢,这样就可以了!
    猜你喜欢
    • 2016-12-23
    • 2015-05-13
    • 1970-01-01
    • 2013-06-02
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2017-04-01
    相关资源
    最近更新 更多