2012-01-19 37 views
0

我有一個測試類,它有@BeforeClass方法和@Test方法。我正在使用Ant運行測試。我想知道什麼是僅運行@BeforeClass方法而不是@Test方法的最佳方法。下面是基本代碼佈局:最好的方法只運行@BeforeClass方法

@BeforeClass 
public void init() throws Exception { 
    /* Perform test initialization */ 
} 

@Test 
public void randomTest() throws Exception { 
    /* Run the test */ 
} 

我試圖使一組的方法@Test部分,然後在螞蟻指定「excludedgroups」屬性排除基團。我也嘗試設置@Test方法被禁用。這兩種方法都不起作用,因爲它不會運行@Test或@BeforeClass方法。

我有一個解決方法是製作一個空的@Test方法,然後使用上面的任一方法,但這看起來不是一個優雅的解決方案。

有沒有更好的方法來運行只有@BeforeClass方法?

編輯:

這裏是我指定的任務在我的build.xml文件:

<testng classpathref="test.classpath" 
     outputdir="${reports}" 
     haltonfailure="false" 
     failureProperty="tests.failed" 
     useDefaultListeners="true"     listeners="org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter" 
     parallel="classes" 
     suitename="Tests" 
     testname="${test.name} Tests"> 

回答

0

我最終決定在每個@Test方法周圍放一個if語句,並讓語句評估一個System屬性。

0

禁用@Test方法可以工作,但你必須至少有一個測試方法對您類或TestNG將不會運行任何東西,所以可能添加一個空的測試方法?運行一個類只是爲了它的配置方法是一種奇怪的場景,你確定這個配置不能放在另一個類中嗎?

+0

在這種情況下,測試的初始化非常耗時,所以最好能夠有一種方法來簡單地初始化測試,然後手動完成測試步驟以重現錯誤。 – Thomas

0

如果將其更改爲@BeforeSuite,它將在不需要空的@Test方法且不包含該方法的情況下運行。您也可以直接使用@Test禁用測試方法(enabled = false)。

+0

如果用\ @BeforeSuite替換\ @BeforeClass,然後並行運行多個測試,那麼只有其中一個會運行。 – Thomas

+0

我已經編輯了這個問題,以顯示我的build.xml文件中有什麼,如果這使得情況更清楚。 – Thomas

+0

你也可以使用@BeforeTest。我不直接通過ant運行我的測試,而是使用由ant執行的suite.xml。看起來像這樣「<!DOCTYPE suite SYSTEM」http://testng.org/testng-1.0.dtd「> <類名= 「NoPackageTest」/> <測試名稱= 「Regression1」> <類名= 「test.sample.ParameterSample」/> <類名=「測試。 sample.ParameterTest「/> ' from [link] http://testng.org/doc/documentation-main.html – Tarken