testngとjunit 4の比較

6344 ワード

1.  testng 


TestNG、すなわちTesting、Next Generation、次世代テスト技術は、JUnitとNUnitの考え方に基づいて構築された注釈を利用してテスト機能を強化するテストフレームワークであり、ユニットテストにも統合テストにも使用できる.
TestNGはオープンソース自動化テストフレームワークである.TestNGは次世代を表す.TestNGはJUnit(特にJUnit 4)に似ていますが、JUnit拡張ではありません.そのインスピレーションはJUnitに由来する.その目的はJUnitより優れており、特にテストが統合されたクラスである.Java注記(JDK 5.0に導入された)を参考にして定義されたテストです.

junit 4の表面に似ている


(1)JUnit 4とTestNGには共通の重要な特性がある.この2つのフレームワークは、テスト作業を驚くほど簡単に(楽しく)、テスト作業に便利にしました.どちらも活発なコミュニティを持ち、アクティブな開発をサポートし、豊富なドキュメントを生成しています.(2)2つのフレームワークの違いはコア設計にある.JUnitは常にユニットテストフレームワークであり、つまり、単一のオブジェクトのテストを促進することを目的として構築されており、このようなタスクを極めて効果的に完了することができます.TestNGは、より高いレベルのテスト問題を解決するために使用されるため、JUnitにはないいくつかの特性を持っています.

2.junit 4の欠点


JUnitの欠点:(1)パラメトリックテストはクラスレベル(2)テストに依存できない(3)構成制御が不十分(インストール/取り外し)(4)侵入性(拡張クラスを強制し、何らかの方法で命名する)(5)静的プログラミングモデル(不要な再コンパイル)(6)異なる複雑なプロジェクトの管理に適したテストは非常に厄介である

3.TestNGの特徴


(1)注記(2)TestNG Javaとオブジェクト向けの機能(3)を使用して、統合クラステストをサポート(たとえば、デフォルトでは、各テストメソッドをテストするクラスのインスタンスを新規作成する必要はありません)(4)独立したコンパイル時間テストコード実行時構成/データ情報(5)柔軟な実行時構成(6)主に「テストグループ」について説明します.テストをコンパイルする場合、TestNGにすべての「フロントエンド」のテストを実行するか、「速い」、「遅い」、「データベース」など(7)が依存テスト方法、並列テスト、負荷テスト、ローカル障害(8)をサポートする柔軟なプラグインAPI(9)がマルチスレッドテストをサポートする

4.testngとjunit 4の比較


とくせい
JUnit 4
TestNG
注釈のテスト
@Test
@Test
テストキット実行前に実行する必要がある

@BeforeSuite
テストキットの実行後に実行する必要がある

@AfterSuite
テスト前に実行する必要がある

@BeforeTest
テスト後に実行する必要がある

@AfterTest
1つのテストメソッドが属する任意のグループの最初のメソッドが呼び出される前に実行されます.

@BeforeGroups
1つのテストメソッドが属する任意のグループの最後のメソッドが呼び出された後に実行されます.

@AfterGroups
現在のクラスの最初のテストメソッド呼び出しの前に実行
@BeforeClassテストメソッドは静的メソッドでなければなりません
@BeforeClass
現在のクラスの最後のテストメソッド呼び出し後に実行
@AfterClass試験方法は静的方法でなければなりません
@AfterClass
各テストメソッドの前に実行する必要があります
@Before
@BeforeMethodがよくわかります
各テストメソッドの後に実行する必要があります
@After
@AfterMethodはよくわかります
無視
@ignore
@Test(enabled=false)
予期しない例外
@Test(expected = ArithmeticException.class)
@Test(expectedExceptions=ArithmeticException.class)とてもわかりやすい
タイムアウト
@Test(timeout = 1000)
@Test(timeout = 1000)
とくせい
JUnit 4
TestNG
スイートテスト@RunWithおよび@Suite注釈は、キット試験を実行するために使用される.JunitTest 1とJunitTest 2を併用して
@RunWith(Suite.class)
@Suite.SuiteClasses({
    JunitTest1.class,
    JunitTest2.class
})
public class JunitTest5 {
}
を実行する必要があります
スイートテストを実行するには、XMLファイル構成を使用します.TestNGTest1TestNGTest2は共に
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
  <test name="testing">
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest1" />
       <class name="com.fsecure.demo.testng.TestNGTest2" />
    </classes>
  </test>
</suite>
を実行する
グループ-
 -- 
</pre><pre name="code" class="java"> 4 ,3 (method1, method2   method4) 

@Test(groups="method1")
public void testingMethod1() {  
  System.out.println("Method - testingMethod1()");
}  

@Test(groups="method2")
public void testingMethod2() {  
    System.out.println("Method - testingMethod2()");
}  

@Test(groups="method1")
public void testingMethod1_1() {  
    System.out.println("Method - testingMethod1_1()");
}  

@Test(groups="method4")
public void testingMethod4() {  
    System.out.println("Method - testingMethod4()");
}
次のXMLファイルは、methed1のグループのみを実行するユニットテスト
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
  <test name="testing">
      <groups>
      <run>
        <include name="method1"/>
      </run>
    </groups>
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest5_2_0" />
    </classes>
  </test>
</suite>
を定義する
パラメトリックテスト(1)@RunWithおよび@Parameter注釈は、ユニットテストにパラメータ値を提供するために使用され、@Parametersはリスト[]を返さなければならず、パラメータはクラスの構造関数にパラメータとして渡される.(2)
junitのパラメータ化はクラスレベルで行われます.すなわち、@beforeと@afterを含むクラス全体がループごとに実行されます.
TestNGのパラメータ化はテストレベルで
(1)XMLファイルまたは@DataProvider注記を使用して、テストにパラメータを提供する.メソッド1:XMLファイル構成パラメータ化テストはメソッド上で@Parameters注記を宣言するだけで、パラメータのデータはTestNGのXMLプロファイルによって提供されます.これにより、異なるデータセット、さらには異なる結果セットを使用して、テスト例を再利用することができます.さらに、エンドユーザでさえ、QAまたはQEは、XMLファイルを使用して独自のデータを提供してテストを行うことができる.方法2:@DataProvider注記パラメータ化テストを行う方法1に比べて、Stringよりも複雑なタイプを提供し、@DataProvider
はVector、StringまたはIntegerタイプの値またはオブジェクトをパラメータとして使用することができる.
依存テスト
JUnitフレームワークは主にテストの分離に焦点を当てており、この特性はしばらくサポートされていません.
依存メソッドにエラーが発生した場合、すべてのサブテストは無視され、失敗とマークされません.dependOnMethodsを使用して依存テストの機能を実現します.
@Test
public void method1() {
   System.out.println("This is method 1");
}

@Test(dependsOnMethods={"method1"})
public void method2() {
    System.out.println("This is method 2");
}
method1()が正常に実行されると、method2()も実行されます.そうしないと、method2()は無視されます.注意:また、依存メソッドが失敗した場合は、失敗とマークされるのではなくスキップされます.TestNGは、失敗したテストのみを再実行するメカニズムを採用しており、依存性テストの設定をより改善しています.
失敗と再実行
JUnit 4では、テストキットに1000件のテストが含まれていて、そのうち3件が失敗した場合、テストキット全体を再実行させる可能性があります(エラーが修正された後)
TestNGで失敗すると、失敗したテストについて説明するXMLプロファイルが作成されます.このファイルでTestNG実行プログラムを実行すると、TestNGは失敗したテストのみを実行します.
 
 
 

5.結論


設計JUnitの目的はコードユニットを分析することであり,TestNGの予想用途は高度なテストである.大規模なテストキットでは、あるテストが失敗したときに数千のテストを再実行することを望んでいません.TestNGの柔軟性はここで特に役立ちます.この2つのフレームワークはすべて自分の優勢があります.
Javaプロジェクトの主要ユニットテストフレームワークとしてTestNGを使用することをお勧めします.TestNGはパラメータ化テスト、依存テスト、スイートテスト(グループ)の面でより強力な機能を持っているからです.TestNGは、高度なテストと複雑な統合テストを意味します.特に大きなスイートテストでは、より柔軟になります.またTestNGはJUnit 4の全機能をカバーしている.

リファレンス


http://www.ituring.com.cn/Article/47829
http://www.ibm.com/developerworks/cn/java/j-cq08296/
http://www.bianceng.cn/Programming/Java/201012/21353_2.htm