#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