Модульное тестирование получение класса ошибок не удалось найти

#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