Skip to main content

%UnitTest.Manager メソッドを使用したユニット・テストの実行

%UnitTest.ManagerOpens in a new tab クラスに含まれるメソッドを使用してテストを開始します。

これは、%UnitTest フレームワークを使用してユニット・テストを実行する一般的なワークフローです。

  1. ^UnitTestRoot グローバルを設定して、テストの場所をシステムに知らせます。

    USER>set ^UnitTestRoot = "C:\UnitTests"
    
  2. %UnitTest.ManagerOpens in a new tab クラスの RunTests() メソッドまたは DebugRunTestCase() メソッドを使用して、テストを実行します。

    USER>do ##class(%UnitTest.Manager).RunTests("MyTests")
    
  3. テストの結果を表示します。

Note:

既定では、RunTests()^UnitTestRoot ディレクトリ内で見つかったすべてのテスト・クラスをロードしてコンパイルし、含まれているすべてのテストを実行して、メモリから削除します。

ただし、これがコードを開発する際の最も効率的なパラダイムではない場合がありますつまり、テスト対象のメソッドに小さな変更を加えるたびに、テストを再読み込みおよび再コンパイルしたくない場合もあります。そのため、ユニット・テスト・クラスは多くの場合、外部に格納されます。RunTests() メソッドの引数を使用して、テストをロードするかどうか、どこからロードするか、それらを削除するかどうか、およびその他の考慮事項を明示的に制御できます。詳細は、"RunTest() と DebugRunTestCase() の引数" を参照してください。

%UnitTest テスト実行メソッド

ユニット・テストを実行する際の既定の動作では、テストは InterSystems IRIS にロードされ、コンパイルされ、実行された後、削除されます。これにより、テスト・コードによって InterSystems IRIS ネームスペースが乱雑になるのを防ぎます。この既定の動作から外れるには、DebugRunTestCase() を使用するか、これらのいずれかのメソッドの qualifiers 引数にフラグを追加します。例えば、テスト・ケースをネームスペース内でローカルに開発し、変更を加えるたびに再読み込みしなくて済むようにすることができます。この場合は、qualifiers 引数の一部として /nodelete フラグを渡します。

RunTest (“testSpec”, “qualifiers”, “userparam”)

グローバル ^UnitTestRoot で指定されたディレクトリ内で、1 つのテストまたは一連のテストを実行します。テストが実行されたら、ロードされたすべてのテストとテスト・クラスを InterSystems IRIS から削除します。

USER>Do ##class(%UnitTest.Manager).RunTest("MyTests")
DebugRunTestCase (“testSpec”, “qualifiers”, “userparam”)

テスト・クラスをロードまたは削除せずに 1 つのテストまたは一連のテストを実行します。

USER>Do ##class(%UnitTest.Manager).DebugRunTestCase("MyTests", "/display=none/debug", "/log")

RunTest() と DebugRunTestCase() の引数

testSpec

テスト・スイートの 1 つ以上のテスト・クラスからテストを実行できます。testSpec 引数で、実行するテストおよびそれらの場所を指定します。値が渡されない場合、システムは ^UnitTestRoot とそのサブディレクトリ内のすべてのテスト・クラスを検索し、それらのクラス内のすべてのテストを実行します。一般的な形式は、testSuite[:testCase[:testMethod][;testcase[:testmethod]]...] です。testCase:testMethod のペアはセミコロンで区切られます。以下に例を示します。

MyTestSuite:MyFirstTestCase:MyFirstMethod;MySecondTestCase:MySecondMethod;MyThirdTestCase:MyThirdMethod

同じ構文を使用して、同じクラスから複数のテストを含めることができます。それには、各メソッドのクラスを指定します。以下に例を示します。

MyTestSuite:MyFirstTestCase:OneMethod;MyFirstTestCase:AnotherMethod

引数は以下のとおりです。

  • testSuite

    テスト・クラス・ファイルを含むディレクトリ。このディレクトリは、^UnitTestRoot ディレクトリのサブディレクトリである必要があります。既定では、テスト・マネージャは、このディレクトリとそのサブディレクトリに含まれるすべてのファイルにあるすべてのテストを実行します。

  • testCase

    含まれている各 testCase は、実行するテスト・メソッドを含む単一のクラスを指定します。構文は PackageName.ClassName です。この引数が指定されている場合、テスト・マネージャは、そのクラス内のテストのみを実行します。

  • testMethod

    含まれている各 testMethod は、関連する testCase で示されたテスト・クラスの実行対象のメソッドを選択します。

qualifiers

テストを実行するためのさまざまなオプションを指定します。一般的な構文は、/option1/option2/.../optionN です。以下の修飾子を含めることができます。

  • /load

    テストをディレクトリからロードします。/noload を使用すると、テストはロードされず、既に InterSystems IRIS に存在しているテストを実行します。既定値は /load です。

  • /run

    テストを実行します。/norun を使用すると、ロードは行われますが、テストは実行されません。既定値は /run です。

  • /delete

    実行後にテスト・ケースを InterSystems IRIS から削除します。/nodelete を使用すると、クラスは保存されます。既定値は /delete です。

  • /recursive

    指定されたディレクトリのサブディレクトリ内でテストを検索します。/norecursive を使用すると、サブディレクトリのテストは実行されません。既定値は /recursive です。

  • /debug

    /debug を指定すると、最初のテストが失敗した後にテストは実行されません。ターミナルから実行すると、最初に失敗した後にターミナルはデバッグ・モードになります。この動作を避けるには、/nodebug を使用するか、単に /debug を使用しません。既定値は /nodebug です。

  • /autoload

    /autoload=dir を使用すると、テストは ^UnitTestRoot ディレクトリのサブディレクトリ dir からロードされます。既定のサブディレクトリは _autoload です。

  • /display

    /display=all を使用すると、メソッドの実行時に拡張情報が表示されます。/display=none を使用すると、限定された情報が表示されます。既定値は /display=all です。

userparam

呼び出し元から渡される任意の引数。既定では、マネージャは 1 つの値 /log を認識します。マネージャに、ターミナルへの出力を最小限に抑えて、<install-dir>/mgr ディレクトリの UNITTEST.LOG というファイルに詳細な結果を書き込むよう指示します。

FeedbackOpens in a new tab