PHPのバージョン | アトムバージョン |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (現在) |
SimpleTest や PHPUnit と同様に、 atoum はPHP 言語に固有の単体テスト フレームワークです。ただし、最初から次の考えを念頭に置いて設計されています。
迅速に実装できる、
テスト開発を簡素化し、
信頼性が高く、読みやすく、明確な単体テストを作成できるようにします。
これを達成するために、 PHPが提供する機能を大量に使用して、開発者に単体テストを作成するまったく新しい方法を提供します。したがって、開発者にとって唯一のエントリ ポイントである単一の PHAR アーカイブだけであるため、非常に簡単にインストールして既存のプロジェクトに統合できます。また、その流暢なインターフェイスのおかげで、自然言語に近い方法で単体テストを作成できます。また、匿名関数とクロージャをインテリジェントに使用することで、テスト内でのスタブ化の実装も容易になります。 atum はネイティブに、そしてデフォルトで、分離を保証するために、個別の PHP プロセス内で各単体テストの実行を実行します。もちろん、継続的統合にシームレスに使用でき、その設計により、特定のニーズに非常に簡単に対応できます。 atum は、迅速なテスト実行を可能にしながらメモリ使用量を削減するように開発されているため、パフォーマンスに影響を与えることなくこれらすべてを実現します。また、単体テスト実行レポートを Xunit 形式で生成できるため、Jenkins などの継続的統合ツールと互換性があります。 atum は単体テストの監視を可能にするために、コード カバレッジ レポートも生成します。最後に、主に UNIX で開発されていますが、Windows でも動作します。
atumのインストールは非常に簡単です。github からクローンを作成するか、PHAR をダウンロードするか、単純に Composer を使用します。
atum は、各テスト メソッドを独自の PHP プロセスに分離することで、テスト実行中に高レベルのセキュリティを提供します。もちろん、この機能はすぐに利用できるため、追加の拡張機能をインストールする必要はありません。
atum は並列化された環境でテストを実行し、今日のマルチコア CPU を利用してスイートを可能な限り高速に実行します。
atum は、テストを可能な限り読みやすくする、自然で表現力豊かなアサーションのフル機能のセットを提供します。以下に例を示します。
<?php$this->整数(150) ->isGreaterThan(100) ->isLowerThanOrEqualTo(200) ;
atum は、多くの構造キーワードを含む BDD のような構文をサポートしています。
<?php$this->given($testedInstance = new testingClass()) ->and($testedClass[] = $firstValue = uniqid()) ->then->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
atum は非常にシンプルでありながら非常に強力なモック エンジンを提供します。
<?php$this->given($testedInstance = new testingClass()) ->and($aMock = new mockfoobar()) // ここでは、クラス foobar のモックが動的に作成されます ->and($this->calling($aMock)->doOtherThing = true) // 各呼び出しは doOtherThing( ) インスタンスによって true->and($testedInstance->setDependency($aMock)) が返されます ->then->boolean($testedInstance->doSomething())->isTrue() ->モック($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // $aMock の doOtherThing() メソッドが 1 回呼び出されたことをアサートします。
atum は、例外時にアサートするための明確な API を提供します。
<?php$this->given($testedInstance = new testingClass()) ->and($aMock = new mockfoobar()) // ここでは、クラス foobar のモックが動的に作成されます->and($this->calling($aMock)->doOtherThing->throw = $Exception = newException( )) // doOtherThing() を呼び出すと例外がスローされます->and($testedInstance->setDependency($aMock)) ->then->Exception(function() use ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($例外) ;
atumでは、ネイティブ PHP 関数をモックすることもできます。繰り返しますが、これはすぐに使用できます。
<?php$this->given($this->function->session_start = false) ->and($session = 新しいtestedClass()) ->then->Exception(function () use ($session) { $session->start(); }) ->isInstanceOf('プロジェクト名前空間例外') ->hasMessage('セッションを開始できません') ->function('session_start')->wasCalled()->once() ;
atum は、TAP、clover、xUnit などのいくつかのレポートを作成して、Jenkins やその他の継続的統合ツールと簡単に統合できます。
atum はデータプロバイダーをサポートしており、
atumテストは自動実行をサポートしています。atoum ランナーを含めて、 php php path/to/test/file.php
使用してテストを起動するだけです。
atumの設定ファイルは PHP のみで書かれています (XML、YAML、その他の形式は使用しません) ので、最高の柔軟性が得られます。
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
atum は自動テスト テンプレート ジェネレーターを提供します。
atum は、失敗したテストを簡単に再トリガーするためのループ モードを提供します。
atum には、時間の経過とともに発見される他の興味深い機能がたくさんあります。
atum が動作するには、PHP >= 5.6.0
以降が絶対に必要です。 UNIX では、適切な PHP バージョンがあるかどうかを確認するには、ターミナルで次のコマンドを実行するだけです。
$ php -v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
PHP 5.6.x
または同等のものが表示された場合は、適切な PHP バージョンがインストールされています。 PHAR アーカイブを使用してatoum を使用したい場合は、PHP がphar
モジュールにアクセスできるようにする必要もあります。これは通常、デフォルトで使用可能です。 UNIX では、このモジュールがあるかどうかを確認するには、ターミナルで次のコマンドを実行するだけです。
$ php -m | grep -i phar
Phar
または同等のメッセージが表示された場合、モジュールは正しくインストールされています。 Xunit 形式でレポートを生成するには、 xml
モジュールが必要です。 UNIX では、このモジュールがあるかどうかを確認するには、ターミナルで次のコマンドを実行するだけです。
$ php -m | grep -i XML
Xml
または同等のものが表示されれば、モジュールは正しくインストールされています。単体テストによってコードのカバレッジ率を監視したい場合は、Xdebug 2.3 モジュールが必要になります。 UNIX では、このモジュールがあるかどうかを確認するには、ターミナルで次のコマンドを実行するだけです。
$ php -v | grep -oi 'xdebug'
Xdebug
または同等のメッセージが表示された場合、モジュールは正しくインストールされています。
PHAR アーカイブをダウンロードして、希望する場所 (たとえば、 /path/to/project/tests/atoum.phar
の下) に保存するだけです。この PHAR アーカイブには、 atoumの単体テスト全体に合格する最新の開発バージョンが含まれています。 atumのソース コードは、GitHub リポジトリからも入手できます。 atum が設定で正しく動作するかどうかを確認するには、そのすべての単体テストを実行します。これを行うには、ターミナルで次のコマンドを実行するだけです。
$ php atum.phar --test-it
好みのテキスト エディターを使用して、ファイルpath/to/project/tests/units/helloWorld.php
を作成し、次のコードを追加します。
<?phpnamespacevendorprojectteststsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;usevendorproject;class helloWorld extends atoumtest {パブリック関数 testSay() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); } }
ターミナルを起動し、次のコマンドを実行します。
$ php パス/to/test/file[入力]
次の結果または同等の結果が得られるはずです。
> atum バージョン XXX、フレデリック・ハーディ著。 エラー: 無人例外: テストされたクラス 'vendorprojecthelloWorld' はテスト クラス 'vendorprojecttestsunitshelloWorld' には存在しません
再び好みのテキスト エディターを使用して、ファイルpath/to/project/classes/helloWorld.php
を作成し、次のコードを追加します。
<?phpnamespacevendorproject;class helloWorld {パブリック関数say() {return 'Hello World!'; } }
同じターミナルで、次のコマンドをもう一度実行します。
$ php パス/to/test/file[入力]
次の結果、または同等の結果が得られるはずです。
> atum バージョン 288 (Frédéric Hardy 作成) > VendorprojecttestsunitshelloWorld を実行... [____________________________________________________________][1/1] => テスト期間: 0.00 秒。 => メモリ使用量: 0.25 Mb.> 合計テスト時間: 0.00 秒.> 合計テスト メモリ使用量: 0.25 Mb.> コード カバレッジ値: 100.00%> 実行時間: 0.08 秒.> 成功 (1 テスト、1 メソッド、2 アサーション) 、エラー 0 件、例外 0 件)!
<?phpnamespacevendorprojectteststsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;usevendorproject;class helloWorld extends atoumtest {パブリック関数 test__construct() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello!') ->string($helloWorld->say($name = 'フレデリック・ハーディ'))->isEqualTo('Hello ' . $name . '!') ; } }
atumのドキュメントはまだ作成中です。改善にご協力いただければ幸いです。ただし、 atoumの可能性をすぐにさらに探求したい場合は、以下をお勧めします。
ターミナルでコマンドphp atoum.phar -h
またはコマンドphp scripts/runner.php -h
を実行します。
atumのソースにあるconfigurations
ディレクトリの内容を調べます (設定ファイルのサンプルが含まれているため)。
atumのソースにあるtests/unit/classes
ディレクトリの内容を調べます。このディレクトリにはすべての単体テストが含まれています。
これに関する(フランスの)会議スライドをオンラインでご覧ください。
(フランス語) wiki を読んでください。
ディスカッション チャンネルに参加して、
質問は、 support[AT]atoum(DOT)org のアドレスに電子メールで行ってください。
この場合、最初に行うことは、アーカイブの最新バージョンがあるかどうかを確認することです。再度ダウンロードするだけです。それでも動作しない場合は、ターミナル ウィンドウで次のコマンドを実行します。
$ php -n atum.phar -v
atumのバージョン番号を取得した場合、問題は PHP 設定に起因しています。ほとんどの場合、原因は拡張機能内にあるか、PHAR 形式と互換性がない可能性があるか、セキュリティ対策として PHAR アーカイブの実行を妨げている可能性があります。たとえば、 ioncube
拡張機能は PHAR アーカイブと互換性がないように見えるため、使用している場合は、 php.ini
の次の行をコメントアウトし、先頭に;
を付けて非アクティブ化する必要があります。キャラクター:
zend_extension = /path/to/ioncube_loader*.*
suhosin
拡張機能により PHAR アーカイブの実行が妨げられるため、 atoum を使用できるようにするには、 php.ini
ファイルに次の行を追加してデフォルト設定を変更する必要があります。
suhosin.executor.include.whitelist="phar"
最後に、 atoum を実行すると???%
ような文字が画面に表示される場合は、 php.ini
ファイル内のdetect_unicode
ディレクティブが 1 に設定されていることが原因と考えられます。問題を解決するには、次のようにしてこれを 0 に設定するだけです。 php.ini
ファイルを編集するか、次のコマンドでatoumを実行します。
$ php -d detect_unicode=0 atum.phar [オプション]
これら 3 つの操作でatoutum が動作しない場合は、設定と問題の詳細を記載した電子メールをアドレスsupport[AT]atoum(DOT)orgに送信することをお勧めします。 atum リポジトリのディスカッション チャネルで、 atoum開発スタッフに支援を求めることもできます。
__COMPILER_HALT_OFFSET__
はすでに/path/to/atoum.phar
に定義されていますこのエラーは、 include
またはrequire
を使用して、 atoum PHAR アーカイブがコード内の複数の場所に含まれていることが原因で発生します。この問題を解決するには、 include_once
またはrequire_once
のみを使用してアーカイブをインクルードし、アーカイブが何度もインクルードされないようにする必要があります。
APC は、PHP 拡張機能の形式で配布される PHP 中間コードをキャッシュおよび最適化するための、無料でオープンな堅牢なフレームワークです。 APC を使用するクラスをテストする場合、 apc_fetch
関数が値を取得できないことを示すエラー メッセージが表示される場合があります。すべての PHP 拡張機能と同様、APC にはそれを有効にするための構成オプションがいくつかあります。
apc.enabled
APC を有効にするか無効にするか、
apc.enable_cli
、PHP CLI の APC を有効にするか無効にするか。
atoumで APC を使用するには、 apc.enabled
とapc.enable_cli
1
に設定する必要があります。そうしないと、 atoumで使用される PHP CLI バージョンで有効になりません。
atum を使用してオブジェクトをモックすると、PHP からセグメンテーション違反が発生することがあります。これらのセグメンテーション違反は、場合によってはリフレクションの処理に問題があるバージョン 2.1.0 より前の XDebug によって発生します。 XDebug の現在のバージョンを確認するには、 php -v
実行します。この問題を解決するには、XDebug を最新の安定バージョンに更新する必要があります。システムで XDebug を更新できない場合でも、拡張機能を無効にしてセグメンテーション違反の発生を回避できます。 XDebug が正常に更新または無効化されたことを確認するには、 php -v
実行します。 XDebug の更新または無効化が完了したら、 php atoum.phar --test-it
実行して、すべてのセグメンテーション違反が解消され、 atoum が動作していることを確認します。
ロードマップをお探しですか?
こちらが現在進行中の作業です、
そして、次のリリースには何が含まれるかということです。
アトムはフレデリック・ハーディによって作成されました。現在、それは貢献者の強力なコミュニティによって主導されています。これらはコミッター リストまたはコントリビューター チームで見つけることができます。
atum は BSD-3 条項ライセンスに基づいてリリースされています。詳細については、同梱の LICENSE ファイルを参照してください。