2013-11-08 3 views
2

Я довольно новичок в использовании PHPUnit, и я пытаюсь использовать его более эффективно, используя поставщиков данных. Я могу заставить поставщиков данных работать при написании обычного тестового примера, однако я считаю, что переписываю код установки для нескольких тестовых кодов. Поэтому я пытаюсь расширить PHPUnit_Framework_TestCase классом BaseTestCase, который выполняет все мои общие настройки. Это работает, если я запускаю простой тест в тестовом примере, который расширяет мой класс BaseTestCase. Однако я не могу использовать @dataProvider при расширении моего класса BaseTestCase.Расширение PHPUnit_Framework_TestCase при использовании dataProviders


Так что моя установка:

class BaseTestCase extends PHPUnit_Framework_TestCase{ 
    public static function setUpBeforeClass(){ 
      //do setup 
      //this is getting called and it works 
    } 
} 

class myTest extends BaseTestCase{ 
    public function myBasicTest(){ 
      //this works 
      $this->assertEquals(2, 1+1); 
    } 

    public function myProvider(){ 
      return [ 
       [1,1,2], 
       [1,2,3], 
       [1,4,5], 
      ] 
    } 

    /** 
     * @dataProvider myProvider 
     */ 
    public function testMyProvider($a, $b, $result){ 
      //this doesn't work, the provider never gets called 
      //this would normally work if I extended PHPUnit_Framework_TestCase 
      $this->assertEquals($result, $a+$b); 
    } 
} 

Я знаю, что провайдеры получают побежали перед любым из установки делает так мне интересно, если PHPUnit не знает, что провайдер существует из-за наследство , В любом случае, кто-нибудь знает, возможно ли то, что я пытаюсь сделать, или у PHPUnit есть другой способ решения этих ситуаций?

Спасибо за вашу помощь,

Jordan

+0

Получается, что это не проблема. См. Ответ ниже. – Jordan

ответ

0

Это на самом деле не проблема. У меня была неправильная настройка конструктора в моем тестовом файле. Очень расстраивающий надзор.

+0

Что вы подразумеваете под «неправильным конструктором»? Я только что попал в точную проблему. Я определил конструктор, но он вызывает 'parent :: construct', так что еще может быть проблемой? – mpen

0

Ваш тест функция не начинается со слова 'тест'.

public function test_myProviderTest($a, $b, $result){ 
+0

Правда. Это не мой фактический код. Это был недосмотр, когда я приводил пример. Мой фактический код пытается запустить тест, но он не может найти поставщика. – Jordan

+0

Я не вижу проблемы с вашим кодом, поэтому я думаю, что это может быть проблема с PHPUnit и Inheritance, как вы подозреваете. Я использую тот же код, за исключением статической функции (согласно руководству), но в остальном тот же базовый код, когда он не наследуется. –

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