Creo Elements/Direct Model Manager カスタマイズガイド > Java 拡張 > 拡張開発環境 > Creo Elements/Direct Model Manager ユニットテストの実行方法
Creo Elements/Direct Model Manager ユニットテストの実行方法
ユニットテストでは、単一の Java クラスなどの、個々のソフトウェアコンポーネントをテストします。Creo Elements/Direct Model Manager ユニットテストスイートには、Creo Elements/Direct Model Manager のソースコードが含まれています。NetBeans 拡張開発環境からユニットテストを実行することもできます。Creo Elements/Direct Model Manager ユニットテストでは、JUnit テストフレームワークを使用しています。これはオープンソースのユニットテストインフラストラクチャであり、http://www.junit.org からダウンロードできます。
拡張の開発およびテスト中に Creo Elements/Direct Model Manager ユニットテストを実行して、拡張によって基本の Creo Elements/Direct Model Manager 機能が損なわれないかどうかを確認する必要があります。また、拡張用のユニットテストを追加することもできます。
Creo Elements/Direct Model Manager ユニットテストは、NetBeans 開発環境から実行します。テストによっては、実行時に Creo Elements/Direct Drafting がインストールされていることが要件になります。
* 
ログイン名 medmgr、パスワード "medmgr" でログインし、テストデータベースに対してユニットテストを実行する必要があります。
テストスイートの実行
以下の手順で、ユニットテストを実行します。
1. dev.properties ファイルで、run.modeUnitTests に設定します。
2. Creo Elements/Direct Model Manager ユニットテストとカスタムユニットテストを実行する、またはカスタムユニットテストのみを実行する (デフォルト) ことができます。ユニットテストとカスタムユニットテストを実行するには、run.mm.tests の値を true に変更します。
3. run スクリプト (dev_tools\run.xml) を実行します。コンピュータの速度や実行するテストの数によって異なりますが、テストには 30 分から 60 分ほどかかります。
NetBeans ウィンドウの最下部の出力タブに、ユニットテストの実行メッセージが表示されます。
テストが完了すると、テスト結果を示す Web ページ (unit_tests.log-summary.html) が表示されます。テストに失敗したパッケージへのリンクが、ピンク色の背景で表示されます。ユニットテストが実行されるたびに、ログファイルが上書きされます。以下のテストログファイルが、一時フォルダ (通常は、\users\custom) 内に作成されます。
unit_tests.log
unit_tests.log.html
unit_tests.log-summary.html
ユニットテストを停止するには、NetBeans から stop.unit.tests スクリプトを実行します。
* 
ユニットテストスイートを実行すると、データベースにデータが追加されます。本番データベースに対してはユニットテストを実行しないでください。
個別のユニットテストの実行
個別のユニットテストを実行するには、以下の 2 つの方法があります。
1. ディレクトリ構造内のテスト クラスを選択して、実行します。テストクラスに main() メソッドがある場合は、テストが実行されます。
2. 実行するテストを run.xmlstart_unit_tests ターゲットで指定します。Java タスクへの引数として、テストクラスをリストします。たとえば、
<java classname="com.osm.tools.RunUnitTests" fork="yes">
...
<arg value="com.osm.datamgmt.biz.UnitTests"/>
</java>
特定のテストで問題が発生した場合は、特定のテストにおける特異性を参照してください。
テストの無効化
製品の機能を変更した場合、一部のテストが失敗することがあります。テストの失敗が確認されたら、それらのうちの特定のテストを無効化できます。
一時フォルダ (本書の例では \users\custom) の最上部にある dont_run.txt というテスト除外ファイルに、特定のテストまたはテストグループを含めると、それらのテストが無効になります。
テスト グループを除外するには、アスタリスク (*) ワイルドカードを使用します。
ファイルの各行で、1 つ以上のテストを無効にします。以下に例を示します。
com.osm.datamgmt.biz.PartTest.testEditLinkAttributes では、PartTest 内のテストメソッド testEditLinkAttributes のみが実行されなくなります。他のメソッドはすべて実行されます。
com.osm.ui.taskbar.MainTaskBarTest では、MainTaskBarTest のみが実行されなくなります。
com.osm.ui.* では、com.osm.ui 以下のすべてのテストが実行されなくなります。
ユニットテストが実行されると、除外されたすべてのクラスについて、NetBeans ウィンドウ最下部の実行タブおよびログファイル内で、クラス名/メソッドの後に *** TURNED OFF IN dont_run.txt*** と表示されます。
テストの追加
さらにテストを追加して、拡張をテストできます。テスト クラスが以下の規則に従っている場合は、テスト フレームワークによって表示および実行されます。
テストの Java クラスは、クラス階層内のいずれかの場所で junit.framework.testcase を拡張する必要があります。
ファイル名の末尾には「Test」を付ける必要があります。
テストの記述
適切なユニットテストを記述するには、スキルが必要です。Creo Elements/Direct Model Manager の開発チームは、有用かつ堅牢なユニットテストを作成するために、以下のベストプラクティスを採用しています。
test.com.osm.WMTestCase を拡張します。このクラスにより、テスト開発用の多数のユーティリティが提供されます。
テストする機能をクラス名に記述し、末尾に「Test」を付け加えます。たとえば、ActionMenuTestLoadRuleTest とします。テストドライバにユニットテストクラスを認識させるためには、この命名規則に従う必要があります。
テストスイートの外部でテストを実行できるよう、テストクラスに main() を含めます。その後、テストを実行し、クラスの実行内容を監視することで、テストの失敗の原因を確認できます。
パッケージで保護されたメソッドやフィールドにアクセスするために、ユニットテストを、テストするオブジェクトと同じパッケージ内に入れる必要があります。NetBeans では、これをサポートするために、テスト対象オブジェクトには src ディレクトリを、テストオブジェクトには test ディレクトリを使用します。テストオブジェクトは、テスト対象オブジェクトと同じパッケージ内 (com.osm.biz) にありますが、テスト対象オブジェクト (src\com\osm\biz) とは異なるディレクトリ (test\com\osm\biz) に格納されます。
テストの順序
最も望ましいのは、順序に関係なく独立して実行できるユニットテストを記述することですが、順序に依存するテストを記述しなければならない場合は、テスト用の UnitTests クラスをディレクトリ内に作成します。ディレクトリに UnitTests クラスが存在する場合は、UnitTests クラスのみが実行されます。このクラスは、それぞれのテストを所定の順序で実行します。
特定のテストにおける特異性
MyPacketListTest
MyPacketListTest が失敗し、NetBeans で手動によるテストを実行する場合は、NetBeans を起動する前に、MEDIR 環境変数を Creo Elements/Direct Manager Server の macros ディレクトリのフルパス名 (通常は C:\Program Files\PTC\Creo Elements\Direct Manager Server 20.7\macros) に設定する必要があります。MEDIR の設定を行わないと、「入力内容は無効です」というエラーが発生します。
* 
MEDIR 変数は、ほかの Creo Elements/Direct Manager Server アプリケーションにも影響を与えます。MEDIR 変数を変更する前に、既存の値を記録しておいてください。テスト終了後は MEDIR 変数を元の値に戻します。値が設定されていなかった場合は、設定を解除します。
これは役に立ちましたか?