%UnitTest.Manager メソッドを使用したユニット・テストの実行
%UnitTest.ManagerOpens in a new tab クラスに含まれるメソッドを使用してテストを開始します。
これは、%UnitTest フレームワークを使用してユニット・テストを実行する一般的なワークフローです。
-
^UnitTestRoot グローバルを設定して、テストの場所をシステムに知らせます。
USER>set ^UnitTestRoot = "C:\UnitTests"
-
%UnitTest.ManagerOpens in a new tab クラスの RunTest() メソッドまたは DebugRunTestCase() メソッドを使用して、テストを実行します。
USER>do ##class(%UnitTest.Manager).RunTest("MyTests")
Note:システム・エラー INTERRUPT、FILEFULL、DISKHARD、DATABASE、SYSTEM、STORE、EXTERNALINTERRUPT、ALARM、DSKFUL が発生した場合、テストの実行は停止します。これらのエラーが発生した場合、システムはトラブル状態になるため、他の処理は一時停止します。
-
テストの結果を表示します。
既定では、RunTest() は ^UnitTestRoot ディレクトリ内で見つかったすべてのテスト・クラスをロードしてコンパイルし、含まれているすべてのテストを実行して、メモリから削除します。
ただし、これがコードを開発する際の最も効率的なパラダイムではない場合がありますつまり、テスト対象のメソッドに小さな変更を加えるたびに、テストを再読み込みおよび再コンパイルしたくない場合もあります。そのため、ユニット・テスト・クラスは多くの場合、外部に格納されます。RunTest()Opens in a new tab メソッドの引数を使用して、テストをロードするかどうか、どこからロードするか、それらを削除するかどうか、およびその他の考慮事項を明示的に制御できます。
%UnitTest テスト実行メソッド
ユニット・テストを実行する際の既定の動作では、テストは InterSystems IRIS にロードされ、コンパイルされ、実行された後、削除されます。これにより、テスト・コードによって InterSystems IRIS ネームスペースが乱雑になるのを防ぎます。この既定の動作から外れるには、DebugRunTestCase() を使用するか、これらのいずれかのメソッドの qualifiers 引数にフラグを追加します。例えば、テスト・ケースをネームスペース内でローカルに開発し、変更を加えるたびに再読み込みしなくて済むようにすることができます。この場合は、qualifiers 引数の一部として /nodelete フラグを渡します。
グローバル ^UnitTestRoot で指定されたディレクトリ内で、1 つのテストまたは一連のテストを実行します。テストが実行されたら、ロードされたすべてのテストとテスト・クラスを InterSystems IRIS から削除します。
USER>Do ##class(%UnitTest.Manager).RunTest("MyTests")
このメソッドとその引数の使用方法の詳細は、クラス・リファレンスの "RunTest()Opens in a new tab" を参照してください。
テスト・クラスをロードまたは削除せずに 1 つのテストまたは一連のテストを実行します。
USER>Do ##class(%UnitTest.Manager).DebugRunTestCase("MyTests", "/display=none/debug", "/log")
詳細は、クラス・リファレンスの "DebugRunTestCase()Opens in a new tab" を参照してください。
場合によっては、いずれかのユニット・テストにより SQL 構成オプション (AutoParallel、AutoParallelThreshold など) の値を変更されたり、ロックや開かれたトランザクションが残されたままになり、問題を示すエラー通知がトリガされることがあります。ユニット・テスト・マネージャ %UnitTest.ManagerOpens in a new tab は、次のユニット・テストを実行する前に、変更された SQL 構成オプションの値のリセット、残っているロックの削除、またはトランザクションのクローズを自動的に行います。