PHPUnit @depends раздражение не работает

#php #yii2 #phpunit

#php #yii2 #phpunit

Вопрос:

Когда я кодирую тестовый код phpunit с помощью @depends(в Yii2), этот тестовый код с @depends будет пропущен.Кажется, что функция, от которой зависит, не может быть найдена. Вот код:

тестовый код:

  class GoodsServiceTest extends PHPUnit_Framework_TestCase
{
    private $service;

    public function pull(){
        return [1,2];
    }

    /**
     * @depends pull
     */
    public function testPush($stack){
        $this->assertEquals([1,2],$stack);
    }
}
 

сообщение консоли после запуска теста:

 E:xampp_5_5_32phpphp.exe C:/Users/huzl/AppData/Local/Temp/ide-phpunit.php --bootstrap E:MICvagrantrentalfrontendtests_bootstrap.php --no-configuration --filter "/::testPush( .*)?$/" frontendtestsexampleGoodsServiceTest E:MICvagrantrentalfrontendtestsexampleGoodsServiceTest.php
Testing started at 15:35 ...
PHPUnit 4.8.27 by Sebastian Bergmann and contributors.

This test depends on "frontendtestsexampleGoodsServiceTest::pull" to pass.

Time: 430 ms, Memory: 4.50MB

No tests executed!

Process finished with exit code 0
 

Кто-нибудь может помочь?

Комментарии:

1. Разве не pull должно быть assert, который проходит? Когда testPush это зависит от push , push оно само должно быть успешным перед выполнением testPush

2. замените ваше изображение на ваш код и ошибку

3. @masterFly я так думаю, но я не знаю почему. Возможно ли что push -либо, что не может быть найдено?

4. Я так не думаю. Но я думаю, в этом случае вам нужно @before . таким образом, вы можете иметь private функцию для push и добавлять @before testPush аннотации для push функции. Так что он будет выполняться до testPush выполнения

5. На самом деле, я просто пытаюсь использовать @depends, но он не может работать нормально. Я потратил на это много часов, что заставляет меня чувствовать себя скучно.

Ответ №1:

Я обнаружил, что я должен запустить весь тестовый класс GoodsServiceTest , а не только метод тестирования testPush .В то же время я должен подтвердить testPull запись раньше testPush . Надеюсь, этот ответ поможет кому-то еще

 class GoodsServiceTest extends PHPUnit_Framework_TestCase
{
    private $service;

    public function testPull(){
          return [1,2];
    }


    /**
     * @depends pull
     */
    public function testPush($stack){
        $this->assertEquals([1,2],$stack);
    }

}
 

Ответ №2:

Тест может зависеть только от других тестов. pull не является тестом, потому что у него нет testPrefix.

Но то, что вы на самом деле хотите использовать, — это поставщик данных.

 class GoodsServiceTest extends PHPUnit_Framework_TestCase
{
    private $service;

    public function getStacks()
    {
        return [ //a list of test calls
                   [ // a list of test arguments
                       [1,2], //first argument
                       3 //second argument
                   ],
                   [
                       [3,5],
                       8
                   ]
               ];
    }


    /**
     * @dataProvider getStacks
     */
    public function testStacks($stack, $expectedResult)
    {
        $this->assertEquals($expectedResult, array_sum($stack));
    }
}
 

Комментарии:

1. После замены pull на testPull , это еще не сработало.

2. Вы изменили аннотацию на @depends testPull ?

3. Конечно, и приложение не вступило в testPull