簡體   English   中英

如何在TestNG中保留組順序

[英]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 { }

很多種方法

最簡單-優先

較難(組)

查看testng手冊(例如http://www.mkyong.com/tutorials/testng-tutorials/ )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM