【发布时间】:2017-02-14 09:52:32
【问题描述】:
我正在玩 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('foo@bar.com');
$this->assertCount(1, $observer->getChangedUsers());
}
}
当我尝试运行此测试时,我收到以下错误消息:
PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /home/.../.../Test/ObserverTest.php on line 9
我用 composer 安装了 PHPUnit,这是我的 composer.json 文件内容:
{
"require": {
"phpunit/phpunit": "^6.0"
},
"autoload": {
"psr-4": {"DesignPatterns\\": "src/"}
}
}
根据PHPUnit 6 documentation,您的测试现在应该扩展 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
【问题讨论】:
-
进入供应商并查看phpunit是否存在
-
测试文件在src文件夹中?如果是,它应该在命名空间中有 DesignPatterns 后缀?
-
嗨,是的,phpunit 在那里。
-
不,测试文件不在 src/ 中,它在 Test 文件夹中
-
如何在自动加载器中加载测试文件夹?
标签: php unit-testing phpunit php-7