MakeGood(on Eclipse)を使うならPHPUnitはComposerが確実(.pharは使わない)
MakeGoodのインストールで散々ハマりながらも動作環境を構築するに至ることができました。
実際に動作する環境を構築してみて、サイトでみかけた一言が、
結構重要だったのかなと感じるに至りました。
MakeGood(Eclipse)を使うならPHPUnitはComposerでインストールした方が確実。
というか、Composerでインストールされてくる依存コンポーネントを見れば、
到底手動ではインストールしきれない数のインストールがされてくることが分かります。
概要
MakeGood(on Eclipse)を使うならPHPUnitはComposerで、.pharは使わない
MakeGood(Eclipse)を使おうとあちこち読み漁っている時に、
ふと以下のコメントに目が止まりました。
ShakeyDave commented on 7 Nov 2015
Hi – this could be a configuration error by me – I’ve been following the instructions here: [[http://blog.loftdigital.com/running-phpunit-tests-in-eclipse-pdt]] on a Windows machine, though I’ve adjusted them to bring things up-to-date (i.e. I’ve installed PHPUnit as a project dependency using Composer, not PEAR).
Here’s the stack trace:
1234567891011121314151617 Fatal error: Class 'PHPUnit_Util_Configuration' not found in C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\DependencyInjection\PHPUnitConfigurationFactory.php on line 70Call Stack:0.0000 265392 1. {main}() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\bin\testrunner.php:00.0468 2725632 2. Symfony\Component\Console\Application->run() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\bin\testrunner.php:550.0468 3115712 3. Symfony\Component\Console\Application->doRun() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\symfony\console\Symfony\Component\Console\Application.php:1240.0468 3116768 4. Symfony\Component\Console\Application->doRunCommand() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\symfony\console\Symfony\Component\Console\Application.php:1930.0468 3117192 5. Symfony\Component\Console\Command\Command->run() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\symfony\console\Symfony\Component\Console\Application.php:8870.0468 3123376 6. Stagehand\TestRunner\CLI\TestRunnerApplication\Command\PluginCommand->execute() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\symfony\console\Symfony\Component\Console\Command\Command.php:2520.0624 4403416 7. Stagehand\TestRunner\CLI\TestRunnerApplication\Command\PluginCommand->createTestRunner() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\CLI\TestRunnerApplication\Command\PluginCommand.php:1490.0624 4403544 8. Stagehand\TestRunner\Core\ApplicationContext->createComponent() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\CLI\TestRunnerApplication\Command\PluginCommand.php:2950.0624 4403608 9. Stagehand\ComponentFactory\ComponentFactory->create() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\Core\ApplicationContext.php:1040.0624 4404112 10. Symfony\Component\DependencyInjection\Container->get() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-componentfactory\src\Stagehand\ComponentFactory\ComponentFactory.php:760.0624 4404704 11. Stagehand\TestRunner\DependencyInjection\PHPUnitContainer->getTestRunnerService() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\symfony\dependency-injection\Symfony\Component\DependencyInjection\Container.php:3120.0780 4467296 12. Stagehand\TestRunner\Process\TestRunner->__construct() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\DependencyInjection\PHPUnitContainer.php:4460.0780 4467368 13. Stagehand\TestRunner\Preparer\PHPUnitPreparer->prepare() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\Process\TestRunner.php:890.0780 4467448 14. Stagehand\TestRunner\DependencyInjection\PHPUnitConfigurationFactory->create() C:\eclipse\eclipse\plugins\com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510\resources\php\vendor\piece\stagehand-testrunner\src\Preparer\PHPUnitPreparer.php:66I’m using the V11 x64 Thread Safe build of PHP. Could it be an issue with php-win.exe not recognising namespaces, maybe?
-G訳-
こんにちは – これは私の設定エラーかもしれません – 私はここに指示に従ってきました:Windowsマシン上の[[http://blog.loftdigital.com/running-phpunit-tests-in-eclipse-pdt]]、 私は物事を最新にするよう調整しましたが(つまり、PHPUnitをPEARではなくComposerを使ってプロジェクトの依存関係としてインストールしました)。
スタックトレースは次のとおりです。
私も同じ問題に直面していました。
PHARでPHPUnitをインストールしたり、Composerを使ったりと、
試行錯誤をしている中で、このエラーに対して質問をされている方の
最後の注記としてのコメントは何か意味があるのではないかと感じたのです。
つまり、PHPUnitをPEARではなくComposerを使ってプロジェクトの依存関係としてインストールした
(だから「PEARでインストールしていないかい?」という無用な返答は不要だ)
そう言っているように聞こえたのです。
言い換えれば、
「PHPUnitをMakeGood(on Eclipse)で使うならComposerでインストールすること」
ぐらいは私は分かっている。
たぶん、そう言いたいのかなと。
そこから、ComposerでMakeGoodを動く環境を構成する模索をし、解決に至る事ができました。
彼の一言は振り返ってみれば非常にいいヒントになった。
現実的にはComposerじゃなきゃ無理だ
どうしてそう思うのか?
コマンドラインでPHPUnitを動かすだけであれば手動インストールも可能でしたが、
実際、Composerでインストールされてくる依存コンポーネント群を見ると、
実際はこれだけのものが必要なのか・・・と唖然とするのです。
例えば、以下の様な「composer.json」で、
「phpunit/phpunit」と「phpunit/phpunit-skeleton-generator」を指定して、
インストールを行ったとします。
composer.json
1 2 3 4 5 6 |
{ "require-dev": { "phpunit/phpunit": "5.*", "phpunit/phpunit-skeleton-generator": "*" } } |
コマンドプロンプトによる実行の結果は以下のようになります。
5行目から34行目までがインストールされたコンポーネントです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
C:\composer>composer update Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 30 installs, 0 updates, 0 removals - Installing symfony/yaml (v3.3.16): Loading from cache - Installing sebastian/version (1.0.6): Loading from cache - Installing sebastian/resource-operations (1.0.0): Loading from cache - Installing sebastian/recursion-context (2.0.0): Loading from cache - Installing sebastian/object-enumerator (2.0.1): Loading from cache - Installing sebastian/global-state (1.1.1): Loading from cache - Installing sebastian/exporter (2.0.0): Loading from cache - Installing sebastian/environment (2.0.0): Loading from cache - Installing sebastian/diff (1.4.3): Loading from cache - Installing sebastian/comparator (1.2.4): Loading from cache - Installing doctrine/instantiator (1.0.5): Loading from cache - Installing phpunit/php-text-template (1.2.1): Loading from cache - Installing phpunit/phpunit-mock-objects (3.4.4): Loading from cache - Installing phpunit/php-timer (1.0.9): Loading from cache - Installing phpunit/php-file-iterator (1.4.5): Loading from cache - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache - Installing phpunit/php-token-stream (1.4.12): Loading from cache - Installing phpunit/php-code-coverage (4.0.8): Loading from cache - Installing webmozart/assert (1.3.0): Loading from cache - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache - Installing phpdocumentor/reflection-docblock (3.3.2): Loading from cache - Installing phpspec/prophecy (1.7.6): Loading from cache - Installing myclabs/deep-copy (1.7.0): Loading from cache - Installing phpunit/phpunit (5.7.27): Loading from cache - Installing symfony/polyfill-mbstring (v1.8.0): Loading from cache - Installing psr/log (1.0.2): Loading from cache - Installing symfony/debug (v3.0.9): Loading from cache - Installing symfony/console (v2.8.39): Loading from cache - Installing phpunit/phpunit-skeleton-generator (2.0.1): Loading from cache sebastian/global-state suggests installing ext-uopz (*) phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) symfony/console suggests installing symfony/event-dispatcher () symfony/console suggests installing symfony/process () symfony/console suggests installing psr/log-implementation (For using the consol e logger) Package phpunit/phpunit-skeleton-generator is abandoned, you should avoid using it. No replacement was suggested. Writing lock file Generating autoload files C:\composer> |
これは以下の様な要件に従ってインストールされています。
phpunit/phpunit 5.7.27
requires
- php: ^5.6 || ^7.0
- phpunit/php-file-iterator: ~1.4
- phpunit/php-text-template: ~1.2
- phpunit/php-code-coverage: ^4.0.4
- phpunit/php-timer: ^1.0.6
- phpunit/phpunit-mock-objects: ^3.2
- phpspec/prophecy: ^1.6.2
- symfony/yaml: ~2.1|~3.0|~4.0
- sebastian/comparator: ^1.2.4
- sebastian/diff: ^1.4.3
- sebastian/environment: ^1.3.4 || ^2.0
- sebastian/exporter: ~2.0
- sebastian/global-state: ^1.1
- sebastian/object-enumerator: ~2.0
- sebastian/resource-operations: ~1.0
- sebastian/version: ^1.0.6|^2.0.1
- myclabs/deep-copy: ~1.3
- ext-dom: *
- ext-json: *
- ext-mbstring: *
- ext-xml: *
- ext-libxml: *
requires (dev)
- ext-pdo: *
suggests
- phpunit/php-invoker: ~1.1
- ext-xdebug: *
ちなみに上記の「phpunit/phpunit-skeleton-generator」単体でも、
こんなに多くはありませんが、そこそこの依存関係は発生します。
phpunit/phpunit-skeleton-generator 2.0.1
requires
- php: >=5.3.3
- phpunit/php-text-template: ~1.2
- sebastian/version: ~1.0
- symfony/console: ~2.4
requires (dev)
- phpunit/phpunit: ~4.0
- mikey179/vfsstream: ~1.2
これだけのコンポーネントを手でインストールする事を考えると、
やっぱりちゃんと動く環境を構築するのは、もはや修行だなとさえ思います。
MakeGood(on Eclipse)を使うなら、
PHPUnitはComposerでインストールする。これが確実。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: