как проверить переменную закрытого / защищенного класса, если задан тип по умолчанию

#php #unit-testing #phpunit #typeerror #php-7.2

#php #модульное тестирование #phpunit #ошибка типа #php-7.2

Вопрос:

Это упрощенный пример, поймите проблему.

Код работает У меня проблема, когда я хочу протестировать PHPUnit

IBase.php

 namespace interfaces; interface IBase {}  

FileNavigate.php

 class FileNavigate {   private IBase $f3; // lt;= line: 5 #RED   public function __construct(IBase $f3, $file = '') { // lt;= #GREEN use IBase  $this-gt;f3 = $f3;  } }  

FileNavigateTest.php

 declare(strict_types=1);  use PHPUnitFrameworkTestCase;  class FileNavigateTest extends TestCase {   public function testInterface() {  $mock = $this-gt;createMock(interfacesIBase::class);  $f3_get_FileNavigate = new FileNavigate($mock); // lt;= line: 10   $this-gt;assertTrue(true);  }  }  

cmd:

 PHPUnit 8.5.21 by Sebastian Bergmann and contributors.    ..E... 1 / 1 (100%)    Time: 8 ms, Memory: 4.00 MB    There was 1 error:    1) FileNavigateTest::testInterface  ParseError: syntax error, unexpected 'IBase' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)    /html/app/v2/FileNavigate.php:5  /html/tests/FileNavigateTest.php:10    ERRORS!  Tests: 1, Assertions: 1, Errors: 1.  Script ./vendor/bin/phpunit tests handling the test event returned with error code 2  Script @test was called via t   

Я знаю, что ошибка в файле «FileNavigate.php» на линии 5

Только моя IDE работает лучше, когда я использую эту нотацию.

Кто-нибудь знает, как это проверить?

Класс должен проверить, имеет ли полученный объект этот интерфейс, и заменяет класс, у которого уже есть этот интерфейс.

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

1. Это упрощенный пример, поймите проблему. класс предназначен для проверки того, имеет ли объект этот интерфейс, класс здесь не используется

2. Попробовал ваш код — работает нормально. Я думаю, что проблема в пространствах имен — старайтесь следовать стандартам PSR.

3. @Maksim Код работает нормально, и это версия 2, я переписываю его для php 7 и хотел использовать ввод переменных, и он работает нормально. У меня проблема, когда я хочу протестировать PHPUnit

Ответ №1:

В FileNavigate.php файл используйте phpdoc: Важный комментарий принимает форму:

 /** @var IBase */ private $f3;   

или

 /** @param IBase $f3 */ private $f3;  

нет

 /* lt;= bad form * @var IBase */ private $f3;  

может быть, именно поэтому ваша среда разработки не может видеть типы