TestNGのテスト方法依存管理の改善


詳細
TestNGは強力なユニットテストツールです.JUnit 3、4のバージョンに比べて、TestNGは良い機能「テスト依存」を追加しました.たとえば、次のようなテスト方法を書くことができます.

	@Test(dependsOnMethods="testMethod2")
	public void testMethod1() {
        System.out.println("in testMethod1");
	}

これは、testMethod 1テストを実行する前に、testMethod 2というメソッドをチェックし、testMethod 2というメソッドテストが合格した場合にtestMethod 1を実行することを意味します.そうしないと、testMethod 1の実行結果を直接「skipped」とマークします.大規模なプロジェクトのテストでは、特にユニットテストではないテストに関連する場合、この特性は非常に役立ちます.dependsOnMethodsのプロパティは、@Test(dependsOnMethods="com.test.Test 1.testMethod 2")と書くなど、他のクラスのテスト方法を参照できます.
しかし、このように、テストクラスを単独で実行する場合は、面倒です(このようなテストクラスを単独で実行する方法はユニットテストではほとんど存在しませんが、自動化された統合テスト、機能テストでは実行時間の問題がよくあります).私はcomに書きました.test.Test 1というクラスのあるテストメソッドに@Test(dependsOnMethods="com.test.Test 2.testMethod 2")と書かれていますが、Test 1を実行すると、エラーが直接出てtestMethod 2メソッドが見つからないことを示し、Test 1とTest 2を1つのsuiteとして統一して実行する場合にのみ正常に動作します.
TestNGにはグループへの依存管理もあり、同様にこの問題がある.
この問題を解決するために、集積テスト、機能テストに適したTestNGバージョンを得て、いくつかのTestNGのソースコードを研究して、2つの場所を修正してこの問題を解決することができることを発見しました:
1. org.testng.internal.MethodHelperのfindMethodsNameメソッド.この方法は名前に基づいてテスト方法を検索するためのもので,異常は存在しない.異常を投げ出した部分は以下のように注釈すればよい.
			if (!foundAtLeastAMethod) {
				System.out.println(" 。");
				
//				throw new TestNGException(mainMethod
//						+ "() is depending on nonexistent method "
//						+ currentRegexp);
			}

この方法はテスト依存項目をチェックするときにのみ呼び出され,他の機能に影響を及ぼさずに安心して修正できる.
2. org.testng.internal.InvokerクラスのcheckDependenciesメソッドでは、依存中にgroupが存在しないかどうかをチェックするために、コメントすればよい.
		// Any missing group?
		// if (testMethod.getMissingGroup() != null) {
		// return false;
		// }

このように修正すると,ある試験方法の依存に存在しないmethodやgroupがある場合,skipというmethodではなく,直接このmethodを実行する.やはりオープンソースは便利ですね.
  • testng-5.8-jdk15.jar (824.3 KB)
  • 説明:依存管理後のtestng 5を修正する.8,jdk 1に適用する.5リリース
  • ダウンロード回数:53