Как ожидать фатальных ошибок с простейшим в php - PullRequest
1 голос
/ 06 января 2011

Я пытаюсь написать контрольный пример, чтобы гарантировать, что класс Singleton не может быть создан.Конструктор для Singleton определен как закрытый, поэтому мой тест выглядит следующим образом:

$this->expectError();
$test = new TestSingletonClassA();

Вместо того, чтобы перехватить ошибку и пройти тест, я получаю 'PHP Fatal error: Call to private Singleton ::__construct ()».Я также попытался передать PatternExpectation в качестве параметра для OutlookError, но это тоже не сработало.Есть ли у вас какие-либо предложения?

Некоторый фон: php5.3, simpletest1.1a

Ответы [ 3 ]

0 голосов
/ 06 января 2011

Если ваш php-код выдает FATAL ERROR, он никогда не попадет в phpunit, поэтому вы должны написать «правильный» код, чтобы протестировать его. Если вы вызываете приватный метод, он выдаст исключение, поэтому он не попадет в phpunit. Вы должны изменить это.

Я думаю, что вы должны издеваться над объектом. Попробуйте эти сообщения на эту тему (это серия из 4 сообщений) и эти слайды (из слайда # 43).

0 голосов
/ 06 января 2011

Фреймворки модульного тестирования не могут поймать такие вещи.Но вы можете сделать это с PHPT и подобными инфраструктурами регрессионных тестов.

Возможно, вам придется перепрыгнуть через несколько обручей, чтобы подключить его к PHPUnit, но, вероятно, есть способы интегрировать его с остальными тестами.Вам просто нужно отделить утверждения и особый случай, когда вы ожидаете фатальную ошибку.

0 голосов
/ 06 января 2011

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

это трудно проверить на большинстве языков. например, java, c # и c ++ даже не позволят вам скомпилировать этот код. так что он никогда не сможет работать вообще D:

...