2013-09-21 120 views
0

有沒有一種方法來以編程方式爲@Test設置「啓用」屬性?以編程方式「啓用」TestNG方法

就像在@BeforeClass中定義一個布爾變量,並通過啓用檢查它?

用例如下:同一個測試者測試幾個類,但並不是所有的類都實現了所有的方法,所以不應該跳過缺少的方法。

測試者會是這樣的

public abstract class MegaTester { 

    @Test 
    public void test1() { 
    ... 
    } 

    @Test 
    public void test2() { 
    ... 
    } 

    @Test 
    public void test3() { 
    ... 
    } 
} 

public class ATest extends MegaTester { 
    @Test 
    public void test1() { 
    // my own implementation of test1 
    } 

    // test2 from MegaTester will be called here 

    // I don't implement test3, but how do I indicate I don't want it ran from MegaTester? 
} 

感謝

回答

1

對於testng中的Iannotationtransformer請參考Here,並在運行時實現變換方法將enabled改爲false。

+0

這就是我所需要的。謝謝! – user1293962

0

你需要測試的缺失的方法嗎?如在中,使用Java反射來確保該方法不存在?然後你需要定義test2()和test3()。

否則,你可以只有一個空的身體。測試會成功,因爲它沒有執行任何操作。我不確定你在測試報告中沒有SKIP會試圖避免什麼。有許多有效的跳過測試的原因,並且你已經給出了其中的一個。

如果ATest只測試一個沒有實現test3()的類,那麼在其定義中使用@Test(enabled=false)。這樣,TestNG將永遠不會調用test3()。

這裏是我會重做您所提出的:

public abstract class MegaTester { 

    @Test 
    public void test1() { 
    ... 
    } 

    @Test 
    public void test2() { 
    ... 
    } 

    @Test 
    public void test3() { 
    ... 
    } 
} 

public class ATest extends MegaTester { 
    @Test 
    public void test1() { 
    // my own implementation of test1 
    } 

    // test2 from MegaTester will be called here 

    @Test(enabled=false) 
    public void test3() {} 
} 
0

我不完全理解你的需要......但如果你想基於其名稱/班/組跳過功能/其他數據可以設置一個TestNG Listener,並讓它在每個@Test之前運行。

監聽器允許您訪問@Test()註釋中傳遞的所有數據,函數名稱/類,如果您想跳過它,則可以拋出SkipException來跳過測試。但是,如果您想在運行A類時運行X測試(並且X測試不在A類中)......這是不可能的,除非您手動調用該函數,否則將單獨的測試放入您的的testng.xml。