2016-12-11 1 views
1

現在、TestNGで起動したいmongoDBに対していくつかのテストを実行しようとしています。TestNGがテストを実行する前に起動し、その後に停止する

スイートべき:

    のMongoDBインスタンス(可能な埋め込み又は別のプロセス)
  1. ラン一つまたは
  2. (おそらくは異なるクラスまたはパッケージに)より多くのテストのMongoDBインスタンスを停止を開始
  3. <suite name="EmbeddedMongoSmokeTest" verbose="1"> 
    <parameter name="mongoPort" value="27018"/> 
    
    <test name="EmbeddedMongoSmokeTest"> 
        <classes> 
         <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest"> 
          <methods> 
           <include name="startEmbeddedMongoDb" /> 
          </methods> 
         </class> 
         <class name="com.frequentis.ps.platform.tests.persistence.MongoDBSmokeTest"/> 
         <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest"> 
          <methods> 
           <include name="stopEmbeddedMongoDb" /> 
          </methods> 
         </class> 
        </classes> 
    </test> 
    
    0123:

は、私はこれを試してみました

@Test(groups = { "persistence", "mongodb"}) 
public class EmbeddedMongoControllerTest { 
    private static EmbeddedMongoController mongoController; 

    @Test 
    @Parameters({ "mongoHost", "mongoPort"}) 
    public void startEmbeddedMongoDb(@Optional("localhost") String host, @Optional("27017") int port) { 
     mongoController = new EmbeddedMongoController(); 
     mongoController.start(host, port); 
    } 

    @Test 
    public void stopEmbeddedMongoDb() { 
     mongoController.stop(); 
    } 
} 

私は「で見つかりませ空きノード:[DynamicGraph」を言わないのTestNGランナーから例外を取得し、私はこれは私が単一のテストセクションに二度同じクラスを使用しているという事実から来ていると思います。

TestNGスイートXMLを構造化したり、クリーンな方法でタスクを達成するためにどのようなTestNG機能を使用しなければなりませんか?

+0

なぜ、シングルトンを使用するだけではなく、怠惰な初期化も必要ですか? –

答えて

0

the TestNG documentationをご覧ください。

私はあなたの必要性を理解しているので、一連のテストの前にmongoを開始し、それらの後で停止したいと考えています。

@Before/AfterGroup("mongodb")(テストはグループの一部であってもtestngが実行しないため、グループをアクティブ化する必要があります)または@Before/AfterTestを使用できます。

public class EmbeddedMongoControllerTest { 
    private static EmbeddedMongoController mongoController; 

    @BeforeTest // or @BeforeGroup("mongodb") 
    @Parameters({ "mongoHost", "mongoPort"}) 
    public void startEmbeddedMongoDb(@Optional("localhost") String host, @Optional("27017") int port) { 
     mongoController = new EmbeddedMongoController(); 
     mongoController.start(host, port); 
    } 

    @AfterTest // @AfterGroup("mongodb") 
    public void stopEmbeddedMongoDb() { 
     mongoController.stop(); 
    } 
} 

<suite name="EmbeddedMongoSmokeTest" verbose="1"> 
    <parameter name="mongoPort" value="27018"/> 

    <test name="EmbeddedMongoSmokeTest"> 
    <!--If @Before/AfterGroup usage <groups> 
     <run> 
     <include name="mongodb"/> 
     </run> 
    </groups> --> 

    <classes> 
     <class name="com.frequentis.ps.platform.tests.persistence.EmbeddedMongoControllerTest"> 
     </class> 
     <class name="com.frequentis.ps.platform.tests.persistence.MongoDBSmokeTest"/> 
     </class> 
    </classes> 
    </test> 

そして、あなたはMongoDBSmokeTest extends EmbeddedMongoControllerTest場合は、リストからEmbeddedMongoControllerTestを削除することができます。

+0

ありがとう、私はドキュメントを見ていたが、何かを見つけるために盲目だった。今はISuiteListenerを使っていますが、あなたのアプローチも試してみましょう。 – leozilla

+0

リスナーを守ってください。 IMOより優れたアプローチですが、より高度なtestngユーザーには適しています。 – juherr

関連する問題