#cakephp #cakephp-4.x
Вопрос:
У меня есть занятие dynamoDB
на месте
src/Dynamo/shop.php
Мой класс выглядит так, как показано ниже
<?php
namespace AppDynamo;
class Shop
{
-----
}
?>
Я пытаюсь реализовать модульный тест для этого класса, поэтому я создал папку class dynamo в расположении ниже.
app/cake/tests/TestCase/Dynamo
В папке Динамо я создал класс с именем файла ShopTest.php
Для создания модульного тестирования я написал этот класс, как показано ниже
<?php
declare(strict_types=1);
namespace AppTestTestCaseDynamo;
use AppDynamoShop;
use CakeTestSuiteTestCase;
class ShopTest{
public function setUp()
{
$this->shop = new Shop;
}
public function testconnectDynamoDB()
{
debug($this->shop->connectDynamoDB());
$this->assertNotEmpty($this->shop->connectDynamoDB());
}
}
Теперь после выполнения команды phpunit
vendor/bin/phpunit tests/TestCase/Dynamo/ShopTest.php
Я получаю
Class 'AppTestTestCaseDynamoShopTest' could not be found in '/var/www/html/tests/TestCase/Dynamo/ShopTest.php'.
Класс присутствует в этом месте , почему я получаю класс, который не удалось найти ?
root@0ceda1df4444:/var/www/html# cd /var/www/html/tests/TestCase/Dynamo/
root@0ceda1df4444:/var/www/html/tests/TestCase/Dynamo# ls
ShopTest.php
root@0ceda1df4444:/var/www/html/tests/TestCase/Dynamo# cat ShopTest.php
<?php
declare(strict_types=1);
namespace AppTestTestCaseDynamo;
use AppDynamoShop;
use CakeTestSuiteTestCase;
class ShopTest{
Кроме того , я пытаюсь запустить весь тестовый случай по команде ниже, я получаю предупреждение.
root@0ceda1df4444:/var/www/html# vendor/bin/phpunit
PHPUnit 9.5.9 by Sebastian Bergmann and contributors.
Warning: Your XML configuration validates against a deprecated schema.
Suggestion: Migrate your XML configuration using "--migrate-configuration"!
No tests executed!
Комментарии:
1. Не является фактором в вопросе, но:
src/Dynamo/shop.php
должноsrc/Dynamo/Shop.php
соответствовать PSR-4.
Ответ №1:
Нет никакого тестового класса
Сообщение об ошибке там немного сбивает с толку, но суть в том, что это не тестовый класс:
<?php
declare(strict_types=1);
namespace AppTestTestCaseDynamo;
use AppDynamoShop;
use CakeTestSuiteTestCase;
class ShopTest{ # <--
Это просто класс (в названии которого случайно есть это слово Test
).
Сравните с примером из документации:
namespace AppTestTestCaseViewHelper;
use AppViewHelperProgressHelper;
use CakeTestSuiteTestCase;
use CakeViewView;
class ProgressHelperTest extends TestCase # <--
{
Чтобы быть обнаруженным в качестве теста, класс должен быть расширен TestClass
— следовательно, чтобы исправить это:
...
use AppDynamoShop;
use CakeTestSuiteTestCase;
class ShopTest extends TestCase # <--
{
С этим изменением загрузится тестовый класс, и станут очевидными некоторые проблемы, которые легче решить:
$ vendor/bin/phpunit tests/TestCase/Dynamo/ShopTest.php
PHP Fatal error: Declaration of ShopTest::setUp() must be compatible with CakeTestSuiteTestCase::setUp(): void in ~/repos/cakephp/app/tests/TestCase/Dynamo/ShopTest.php on line 11
Fatal error: Declaration of ShopTest::setUp() must be compatible with CakeTestSuiteTestCase::setUp(): void in ~/repos/cakephp/app/tests/TestCase/Dynamo/ShopTest.php on line 11