Я играю с php 7 и phpunit 6. Вот тест, который я написал:
<?php declare(strict_types=1);
namespace Test;
use DesignPatterns\Observer\User;
use DesignPatterns\Observer\UserObserver;
use PHPUnit\Framework\TestCase;
class ObserverTest extends TestCase
{
public function testChangeInUserLeadsToUserObserverBeingNotified()
{
$observer = new UserObserver();
$user = new User();
$user->attach($observer);
$user->changeEmail('[email protected]');
$this->assertCount(1, $observer->getChangedUsers());
}
}
Когда я попытался запустить этот тест, у меня появилось следующее сообщение об ошибке:
PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /home/.../.../Test/ObserverTest.php on line 9
Я установил PHPUnit с композитором, вот мой контент для файла composer.json:
{
"require": {
"phpunit/phpunit": "^6.0"
},
"autoload": {
"psr-4": {"DesignPatterns\\": "src/"}
}
}
Согласно документации PHPUnit 6, ваши тесты теперь должны расширять PHPUnit\Framework\TestCase вместо PHPUnit_Framework_TestCase.
Я знаю, что это не проблема с автозагрузкой. На самом деле, если я заменил PHPUnit\Framework\TestCase на PHPUnit_Framework_TestCase, он отлично работает, но мне было интересно, почему этот синтаксис не работает.
Я пробовал некоторое исследование в google, stackoverflow и репозитории PHPUnit github, но ничего не нашел.
Я с нетерпением жду ваших ответов,
ИЗМЕНИТЬ
Так организованы мои файлы:
src/
├── DataMapper
│ ├── StorageAdapter.php
│ ├── UserMapper.php
│ └── User.php
├── Observer
│ ├── UserObserver.php
│ └── User.php
Test/
├── DataMapperTest.php
└── ObserverTest.php