PHPUnit TDD,PHP fatal error : Call to undefined method

标签 php tdd phpunit undefined

我正在使用 PHPUnit 启动一个 TDD 项目,但有些事情确实让我烦恼。

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

谢谢。

编辑: “TDD 的重点不就是你的测试套件在编写测试时失败吗?” 是的,当然,但我希望对这个项目有一个全局性的了解。 假设我们已经编写了 1000 个测试,并且运行的第一个测试出现了 fatal error 。 但我们并不幸运,当我们实现代码时,该部分将是最后实现的部分之一。我不想“盲目”开发,只有在所有 fatal error 都被清除后才能运行我的测试套件。

所以,是的,失败的测试与由于在此状态下正常的 fatal error 而停止/终止的整个测试过程之间存在巨大差异。

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

最佳答案

TDD 的重点不就是你的测试套件在编写测试时失败吗?

我猜你的观点是它因 fatal error 而终止,而不是只显示红色的“我失败”栏。非常有趣的一点是,我正在使用 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.

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

关于PHPUnit TDD,PHP fatal error : Call to undefined method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339875/

相关文章:

php - SQL JOIN ON 表名等于字段值

javascript - 页面需要刷新才能使用更新的 cookie

unit-testing - 我应该在新项目开始时使用 TDD 吗?

unit-testing - TDD 中的单元测试需要多长时间?

PHPUnit:如何模拟 HTTP 请求?

laravel-5 - Laravel 5.6 模拟 Guzzle 响应

javascript - Ajax 和 MySql 插入、检查和检索

php - CodeIgniter insert_batch()

Python 库 'unittest' : Generate multiple tests programmatically

php - 使用 git 和 submodule,什么是好的文件夹结构?