Почему мой сценарий не вызывает уведомление при доступе к значению в неопределенном массиве? - PullRequest
3 голосов
/ 06 января 2011

У меня есть метод теста, который выглядит следующим образом:

$row = $this->GetRowFromUserTable($id);
$this->assertLessThan(time(), time($row['last_update']));

Когда $ row равен нулю, доступ к $ row ['last_update'] должен вызвать E_NOTICE, и этот тест должен завершиться неудачей, но он не't.

Этот код не выполняется при первом утверждении, поэтому я знаю, что $ row равно нулю (фиксатор тот же):

$row = $this->GetRowFromUserTable($id);
$this->assertNotNull($row);
$this->assertLessThan(time(), time($row['last_update']));

Когда я пишу это:

$row = $this->GetRowFromUserTable($id);
$this->assertEquals(E_ALL, error_reporting());
$this->assertLessThan(time(), time($row['last_update']));

это успешно, поэтому я также уверен, что error_reporting верен, и эта ситуация должна иметь отношение к PHPUnit.

Я использую PHPUnit 3.5.6

Я прочитал этот вопрос: Могу ли я заставить PHPUnit потерпеть неудачу, если код выдает уведомление? , но в ответе предлагается использовать более новую версию PHPUnit, но это ответ 2009 года, так что это не так.: Я использую среду IDE NetBeans 6.9.1 для запуска своего теста.

Ответы [ 3 ]

2 голосов
/ 07 января 2011

Говорят, что "convertNoticesToExceptions" было моей единственной реальной догадкой (+1).

Не могли бы вы написать $foo = $undefinedVariable; где-нибудь в тестовом сценарии, чтобы увидеть, не вызовет ли это также уведомление // не провалит ли тест?

Чтобы проверить, работает ли ваша установка phpunit / php (и, возможно, сузить проблему), вы можете попробовать:

<?php

class myTest extends PHPUnit_Framework_TestCase {
    public function testFoo() {
        $x = $foo;
        $this->assertTrue(true);
    }
}

и запустите (обратите внимание на часть --no-configuration только для того, чтобы убедиться, что вы случайно не взяли phpunit.dist.xml или phpunit.xml)

phpunit --no-configuration foo.php 

Показывает вывод:

PHPUnit 3.5.6 от Себастьяна Бергманна.

E

Время: 0 секунд, Память: 2,50 МБ

Произошла 1 ошибка:

1) myTest :: testFoo Неопределенная переменная: Foo

/ дом / пользователь / foo.php: 5

Может быть, это помогает немного

2 голосов
/ 29 апреля 2011

Конкретный случай, который вы описываете, не дает E_NOTICE. Доступ к неопределенным ключам определенного массива дает E_NOTICE, но странная попытка получить доступ к нулевым значениям, а массив - нет.

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

Есть ли у вас convertNoticesToExceptions свойство конфигурации, установленное в значение "true"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...