web-dev-qa-db-ja.com

PHP致命的なエラー:クラス 'PHPUnit \ Framework \ TestCase'がPHPUnit 6で見つかりませんで、PHP 7.0

私は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

Composerで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リポジトリに関する調査を試みましたが、何も見つかりませんでした。

あなたの答えを楽しみにしています。

[〜#〜] edit [〜#〜]

これは私のファイルが整理される方法です:

src/
├── DataMapper
│   ├── StorageAdapter.php
│   ├── UserMapper.php
│   └── User.php
├── Observer
│   ├── UserObserver.php
│   └── User.php
Test/
├── DataMapperTest.php
└── ObserverTest.php
11
romaind

私は答えを見つけました:

このコマンドラインでテストを実行していました。

phpunit Test/ObserverTest.php

PHPUnitはコンピューターにグローバルにインストールされますが、5.1.3バージョンです。

phpunit -v

PHPUnit 5.1.3 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.0.13-0ubuntu0.16.04.1 with Xdebug 2.4.0
Configuration: /home/.../.../DesignPatterns/phpunit.xml

また、構文PHPUnit\Framework\TestCaseはPHPUnit 6でのみ機能します

さて、php vendor/bin/phpunit Test/ObserverTest.php、それは完璧に動作します...

15
romaind

私の場合、/ Applications/MAMP/Library/binディレクトリのパスに以前のバージョンのphpunitがありました。 5.1.3ではなく、グローバルにインストールされたバージョン(7.5.1)へのシンボリックリンクを作成した後、これによりエラーが修正されました。

cd /Applications/MAMP/Library/bin
mv phpunit phpunit_bak
ln -s /usr/local/bin/phpunit phpunit
0
John Langford