オートローダを管理するプロジェクト内にクラスがあります。クラスの新しい各インスタンスは、autoload関数をSPL自動ロードスタックに追加し、インスタンスを設定解除すると、スタックから独自のインスタンスが削除されます。このクラスはまた、autoloadスタックから一時的に削除できるregister()メソッドとunregister()メソッドもエクスポートします。PHPUnit:自動ロードテストの問題でオートローダを無効にする
私はオートローダーの単体テストを作成しようとしていますが、いくつかの問題があります。 PHPUnitのブートストラップスクリプトにオートローダーを組み込むので、テスト中の他のクラスは通常の使用時と同じように自動ロードできます。オートローダユニットテストの間、この動作を無効にしたいのですが、通常のオートローダを無効にしないでユニットテストを行うことができますが、オートローダのインスタンスのためにユニットテストが合格しなかったかどうかはわかりません私がテストしているブートストラップまたはインスタンス。
私は、ブートストラップファイルに次のようにやってみました:私はこれが働くだろうと思ったが、残念ながらそれだけで投げる
namespace gordian\reefknot\autoload;
use gordian\exampleclasses;
/**
* Test class for Autoload.
* Generated by PHPUnit on 2011-12-17 at 18:10:33.
*/
class AutoloadTest extends \PHPUnit_Framework_TestCase
{
/**
* @var gordian\reefknot\autoload\Autoload
*/
protected $object;
public function __construct()
{
// Disable the unit test autoloader for the duration of the following test
global $unitTestAutoloader;
$unitTestAutoloader -> unregister();
}
public function __destruct()
{
// Restore normal autoloading when the test is done
global $unitTestAutoloader;
$unitTestAutoloader -> register();
}
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this -> object = new Autoload ('\\', 'gordian\exampleclasses', __DIR__ . '/exampleclasses');
}
// Unit tests go here
}
:
$unitTestAutoloader = new gordian\reefknot\autoload\Autoload();
、その後、私のユニットテストでは、次のコードを実装オートローダが他の単体テストのいずれに対しても機能していないため、すべての単体テストを実行するとエラーが発生します。
PHPUnitはすべてのテストを実行する前にすべての単体テストクラスを初期化し、オートローダテストクラスは他のテストクラスがテストするクラスをオートロードすることを妨げています。これは正しいです?
この問題を回避する方法はありますか?テスト・コンストラクタでデフォルト・オートローダーを何か他の方法で使用不可にすることはできますか?この場合のアドバイスをいただければ幸いです。
@GordonM - 通常のオートローダーを無効にするのを避けるには、 'class_exists()'を使うことができます。 –
通常のオートローダーを無効にしたいので、テストオートローダーを単独でテストすることができます。 – GordonM