PHPUnit TDD, PHP Неустранимая ошибка: вызов неопределенного метода - PullRequest
2 голосов
/ 17 марта 2011

Я запускаю проект TDD с использованием PHPUnit, и что-то меня действительно беспокоит.

Кажется, что весь тест не может быть запущен, пока все классы и методы не будут реализованы. Как я могу сделать так, чтобы тест продолжал событие, если класс или метод еще не реализованы?

Спасибо.

Edit: «Разве TDD не в том, что ваш набор тестов дает сбой при написании тестов?» Да, конечно, но я хочу иметь глобальный взгляд на проект. Допустим, мы написали 1000 тестов, и первый прогон делает фатальную ошибку. Но не повезло, что когда мы придем к реализации кода, эта часть будет одной из последних, которая будет реализована. Я не хочу разрабатывать «слепой» и смог запустить свои тестовые наборы только тогда, когда все фатальные ошибки будут устранены.

Так что да, их огромная разница между неудачным тестом и всем процессом тестирования, чтобы остановить / умереть из-за фатальной ошибки, которая является нормальной в этом состоянии.

Как обходной путь, мы создали скелет нашего класса, прежде чем начать писать наши тесты.

1 Ответ

5 голосов
/ 17 марта 2011

Разве TDD не в том, что ваш тестовый набор не работает во время написания тестов?

Полагаю, ваша точка зрения состоит в том, что он умирает с фатальной ошибкой, а не просто отображает красную панель "я не прошел".Довольно интересный момент, я делаю TDD с phpunit, но это никогда меня не беспокоило.

Первое, что пришло мне на ум, было --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

, но при использовании *Переключатель 1019 * выглядит следующим образом:

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.

И теперь второй тест выполняется и проходит

...