對BeforeSuite和BeforeTest的理解


  在BeforeSuite、BeforeTest、BeforeClass、BeforeMethod及BeforeGroups中,后面三個注解都比較好理解,其實BeforeSuite、BeforeTest的字面意思也是很簡單的:

  BeforeSuite:在整個測試集運行之前運行;

  BeforeTest:在測試集中的每個Test之前運行。

  但是有點疑惑的是:BeforeClass、BeforeMethod及BeforeGroups都是在一個測試類開始運行之后才執行的;而BeforeSuite、BeforeTest定義在測試類的內部,但是卻在

測試類運行之前執行。這就有點不大好理解,如果有多個平行的測試類,這些測試類只需要一個BeforeSuite、BeforeTest,那么這個BeforeSuite、BeforeTest定義在哪個測試類

中比較好呢?或者如果每個測試類都定義了BeforeSuite、BeforeTest,這些BeforeSuite、BeforeTest以怎樣的關系運行?

  其實BeforeSuite、BeforeTest的運行與否也是與測試類相關的,如果你在某個測試類中定義了BeforeSuite、BeforeTest,但是在xml文件中不執行該測試類,那么這個

BeforeSuite、BeforeTest也不會被執行。

  因此,我的理解是:如果多個測試類需要一個共同的BeforeSuite、BeforeTest,可以在一個單獨的類中定義,但是運行測試時必須包含該類;如果每個測試類需要不同的

BeforeSuite、BeforeTest,那就各自定義各自的。

  例如:Test1和Test2都定義了BeforeSuite、BeforeTest:

 1 public class Test1 {
 2     
 3     @BeforeSuite
 4     public void f_bs() {
 5         System.out.println("Test1.f_bs()");
 6     }
 7     
 8     @BeforeTest
 9     public void f_bt() {
10         System.out.println("Test1.f_bt()");
11     }
12     
13     @BeforeClass
14     public void f_bc() {
15         System.out.println("Test1.f_bc()");
16     }
17     
18     @Test
19     public void test_m1() {
20         System.out.println("Test1.test_m1()");
21     }
22 }
 1 public class Test2 {
 2     
 3     @BeforeSuite
 4     public void f_bs() {
 5         System.out.println("Test2.f_bs()");
 6     }
 7     
 8     @BeforeTest
 9     public void f_bt() {
10         System.out.println("Test2.f_bt()");
11     }
12     
13     @BeforeClass
14     public void f_bc() {
15         System.out.println("Test2.f_bc()");
16     }
17     
18     @Test
19     public void test_m2() {
20         System.out.println("Test1.test_m2()");
21     }
22 }

  如果XML文件同時運行兩個測試類:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <suite name="suite1">
 4     <test name="test1" verbose="2">
 5         <classes>
 6             <class name="sea.Test1" />
 7             <class name="sea.Test2" />
 8           </classes>    
 9     </test>
10 </suite>

  那么運行結果為如下,可見每個類中定義的BeforeSuite、BeforeTest都執行了:

Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test2.f_bt()
Test1.f_bc()
Test1.test_m1()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m1
PASSED: test_m2

  如果XML文件只執行1個測試類:

1 <?xml version="1.0" encoding="UTF-8"?>
2 
3 <suite name="suite1">
4     <test name="test1" verbose="2">
5         <classes>
6             <class name="sea.Test1" />
7           </classes>    
8     </test>
9 </suite>

  那么運行結果為如下,可見只有Test1類中定義的BeforeSuite、BeforeTest被執行了:

Test1.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1

  如果把兩個測試類放在不同的Test中,那么他們的BeforeTest也是被單獨執行的:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <suite name="suite1">
 4     <test name="test1" verbose="2">
 5         <classes>
 6             <class name="sea.Test1" />
 7           </classes>    
 8     </test>
 9     
10     <test name="test2" verbose="2">
11         <classes>
12             <class name="sea.Test2" />
13           </classes>    
14     </test>
15 </suite>
Test1.f_bs()
Test2.f_bs()
Test1.f_bt()
Test1.f_bc()
Test1.test_m1()
PASSED: test_m1

Test2.f_bt()
Test2.f_bc()
Test1.test_m2()
PASSED: test_m2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM