[英]How to preserve group order in TestNG
我有兩個類,每個類實現的方式有所不同,但兩者的測試相同。 如果每個類並行運行,那么它們會做一些會影響另一個類的事情,因此它們不能並行運行。 (這就是下面代碼的原理)
如果您在Eclipse中將Both類(如下所述)運行為TestNG測試,則可以期望它首先運行ClassAAA類的測試test1和test2,然后再運行ClassBBB的相同測試方法,因為ClassBBB的組注釋指定它依賴於ClassAAA的注釋。
但是,您發現的是,看上去TestNG似乎有不同的看待方式,而且“貌似”它忽略了組順序並並行運行兩個分類的測試。
class Both {
@Test(groups={"base"})
public static abstract class BothBase {
@Test public void test1() { System.out.println("test1"+name()); }
@Test public void test2() { System.out.println("test2"+name()); }
protected String name() {
String s = getClass().getName();
s = s.substring( 1 + s.lastIndexOf("$"));
return " - " + s;
}
}
@Test(groups={"gr1"})
public static class ClassAAA extends BothBase { }
@Test(groups={"gr2"},dependsOnGroups={"gr1"})
public static class ClassBBB extends BothBase { }
}
輸出為:
test1 - ClassAAA
test1 - ClassBBB
test2 - ClassAAA
test2 - ClassBBB
我不喜歡嘗試“強制”它滿足期望的組順序的一種方法是向葉類添加一個偽測試方法,如下所示:
@Test(groups={"gr1"})
public static class ClassAAA extends BothBase {
@Test public void dummyTestMustBeInAllLeavesToEnforceGroupOrder() {
System.out.println("dummyTestMustBeInAllLeavesToEnforceGroupOrder"+name());
}
}
@Test(groups={"gr2"},dependsOnGroups={"gr1"})
public static class ClassBBB extends BothBase {
@Test public void dummyTestMustBeInAllLeavesToEnforceGroupOrder() {
System.out.println("dummyTestMustBeInAllLeavesToEnforceGroupOrder"+name());
}
}
這仍然不能完全完成人們的期望。 輸出為:
test1 - ClassAAA
test2 - ClassAAA
test2 - ClassBBB
dummyTestMustBeInAllLeavesToEnforceGroupOrder - ClassAAA
test1 - ClassBBB
dummyTestMustBeInAllLeavesToEnforceGroupOrder - ClassBBB
這意味着它在完成ClassAAA的測試之前開始運行ClassBBB的測試。
我不喜歡這樣的事實,我必須為每個方法添加一個虛擬/不相關的方法,以使TestNG理解它們不能並行運行。 實際上,我不在乎哪個類首先運行...而且,我並沒有真正實現我想要的功能,因為它們仍在並行運行。
達到我目的的最愚蠢的方法是將測試從基類移到每個葉類-這是您應該如何在TestNG中執行這些操作?
還有另一種方法嗎? 我確定有人會建議優先級-但是,這並不能傳達出真正的意圖-我沒有任何優先級-只是不想讓它們並行運行。 我也不想寫XML文件...
由於靜態內部類而出現此問題。 試試下面的代碼,您將獲得所需的輸出
import org.testng.annotations.Test;
@Test(groups={"base"})
public abstract class BothBase {
@Test public void test1() { System.out.println("test1"+name()); }
@Test public void test2() { System.out.println("test2"+name()); }
protected String name() {
String s = getClass().getName();
s = s.substring( 1 + s.lastIndexOf("$"));
return " - " + s;
}
}
@Test(groups={"gr1"})
class ClassAAA extends BothBase { }
@Test(groups={"gr2"},dependsOnGroups={"gr1"})
class ClassBBB extends BothBase { }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.