2012-05-18 2 views
2

Так что я использую PHPUnit для тестирования. Попытка использовать DataProvider с одним из моих тестов.С помощью PHPUnit, используя поставщик данных, последний набор данных всегда показывает «Случай теста был неожиданно завершен»

/** 
* Tests Events_Event->Events_Event() 
* @dataProvider provider 
*/ 
public function testEvents_Event($Name, $param, $time) { 
     //$this->assertInstanceOf("Events_Event", $this->Events_Event->Events_Event("test2", array())); 
     $this->assertTrue(true); 
    } 

public static function provider() 
    { 
     return array(
      array("test", array("Like a boss"), "Cheack the time"), 
      array("test2", array("Like a boss"), "9:00"), 
      array("test3", array("Time to go home"), "4:00"), 
      array("test3", array("Time to go home"), "4:00") 
      ); 
    } 

Результаты:

testEvents_Event with data set#0 
testEvents_Event with data set#1 
testEvents_Event with data set#2 
testEvents_Event with data set#3: The test case was unexpectedly terminated 

Это происходит на последних данных, не установленных независимо от того, сколько есть и будет ли или нет последний набор данных действительными нет. Как вы можете видеть, мы упростили тест до простого $this->assertTrue(true), и он все еще дает нам ошибку.

Что нам нужно сделать, чтобы заставить Data Provider работать?

В случае, если это важно, я работаю с PHPUnit внутри Zend Studio 9.0.3, я проверил наличие обновлений, и он говорит мне, что все в актуальном состоянии.

+0

Запустите эти тесты локально с включенным xdebug и выполните код за строкой, пока не дойдете до бит, выбрасывающего эту ошибку. Сроки, но единственный способ узнать в отсутствие каких-либо других подсказок. Помог бы grep код PHPUnit для строк, которые имеют этот текст ошибки, затем установите там точку останова, и когда она остановится, используйте stacktrace, чтобы увидеть, где это нужно. –

+2

Попробуйте обновить PHPUnit до последней версии – Gordon

+0

@MattGibson Я действительно надеюсь получить ответ, не получив этого грязного. Но определенно хороший подход, если я не могу никуда с поиском Google. – Chris

ответ

1

Я шел через

.... 

Время: 0 секунд, Память: 12.75Mb

OK (4 испытания, 0 утверждения)

/** 
* Tests Events_Event->Events_Event() 
* @dataProvider provider 
*/ 
public function testEvents_Event($Name, $param, $time) 
{ 

} 

public static function provider() 
{ 
    return array(
     array("test", array("Like a boss"), "Cheack the time"), 
     array("test2", array("Like a boss"), "9:00"), 
     array("test3", array("Time to go home"), "4:00"), 
     array("test3", array("Time to go home"), "4:00") 
     ); 
} 

как запускать тесты? нет других зависимостей? тесты проходят через любую IDE?

1

PHPUnit создает экземпляр тестового примера для каждого метода поставщика данных. Из-за магии PHP вы можете избежать использования статических методов поставщика данных, но они вызываются с использованием экземпляра и, следовательно, должны быть нестатистическими.

Если ваш тестовый пример имеет конструктор, он должен принять три параметра (см. Источник для PHPUnit_Framework_TestCase) и передать их родительскому конструктору. Одна из них - данные поставщика для этого конкретного теста.

Я сомневаюсь, что это проблема. Мои деньги на ZendStudio и как он анализирует вывод PHPUnit, как предложил Гордон. Когда вы запускаете этот тестовый пример из командной строки, вы видите ту же проблему?

Смежные вопросы