2017-08-16 191 views
0

我有一套具有與@BeforeSuite註解的設置方法,該套件之前運行測試。偶爾我需要單獨運行測試或者在一個班級中進行所有測試。有沒有辦法讓我的setUp方法在這些之前運行。TestNG:應該按方法或類的測試運行測試,調用@BeforeSuite方法?

我的理解是,TestNG的創建默認套件所以應該不會不管我如何運行測試,如果我有@BeforeSuite應該所有的測試之前運行註釋的方法。但是這對我不起作用。它只在我運行完整套件時才運行。

XML套件。如果我從這裏運行測試,它會起作用。 (右鍵單擊,選擇Run)

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="OvernightSuite"> 
<test name="Test Sequential" preserve-order="true" parallel="none"> 
    <classes> 
     <class name="com.myComp.test.cases.setUpClass" /> 
     <class name="com.com.myComp.test.cases.testClass1" /> 
     <class name="com.com.myComp.test.cases.testClass2" /> 
    </classes> 
</test> 
</suite> 

建立一流

public class setUpClass{ 
@BeforeSuite 
public void setUp() { 
    populateDataSources(); 
    populateVariables(); 
} 
    @Test 
    public void datasourcesWereSetUpTest() { 
     boolean result = method.read(); 
     assert(result); 
    } 
} 

一個測試類的。如果我在這裏運行,(突出顯示,右鍵單擊,選擇運行)beforeSuite不會被執行。

public class testClass1{ 
    @Test 
    public void someTest() { 
     boolean result = method.read(); 
     assert(result); 
    } 
} 

回答

0

只要@BeforeSuite標註的方法是測試類(具有一個或多個@Test方法,它的一個)的一部分,它應該工作,您無需做任何額外的東西。

但是如果你@BeforeSuite方法是在不同的類,那麼你有它運行的唯一方法是,如果你執行下列操作之一:

  • 創建一套XML文件,包含類包含@BeforeSuite方法以及您的測試類。 (或)
  • 創建用於實施接口org.testng.ISuiteListener一個TestNG的監聽器,並且經由服務裝載器的方法在本聽者經由@Listeners註解(或)<listeners>標籤(或)移動的@BeforeSuite邏輯成onStart(),然後絲。欲瞭解更多信息,你可以閱讀我的博客文章this
+0

使用上述添加XML套件,其包括設置類所提出的方法的工作原理,如果我通過從XML套件中選擇一個測試類運行,但如果我從類本身的實際方法運行。有什麼建議,爲什麼?應該這樣工作嗎?這可能與我的IDE設置有關嗎? – ciffieM

+0

我沒有完全明白你的問題。你能分享一下你如何在IDE中運行你的測試的截圖,並顯示包含你的測試類和'@ BeforeSuite'註釋方法的代碼嗎? –

+0

我已經添加了額外的信息,問題 – ciffieM

0

有沒有嘗試過任何下列選項:

'@BeforeTest' 

要在任何的包含在的testng.xml文件中的<測試>標籤的測試方法執行一組向上的方法。

'@BeforeMethod' 

在任何註釋爲@Test的測試方法之前執行設置方法。

http://howtesting.blogspot.ie/2012/12/difference-between-beforetest-and.html

+0

是的,@BeforeTest也應該在這裏工作,它有相同的結果。它從一個從.xml文件調用的測試類運行,但不是在java類中調用的測試之前運行 – ciffieM