对BeforeSuite和BeforeTest的理解
2016-05-01 12:21
357 查看
在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:
如果XML文件同时运行两个测试类:
那么运行结果为如下,可见每个类中定义的BeforeSuite、BeforeTest都执行了:
如果XML文件只执行1个测试类:
那么运行结果为如下,可见只有Test1类中定义的BeforeSuite、BeforeTest被执行了:
如果把两个测试类放在不同的Test中,那么他们的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:
public class Test1 { @BeforeSuite public void f_bs() { System.out.println("Test1.f_bs()"); } @BeforeTest public void f_bt() { System.out.println("Test1.f_bt()"); } @BeforeClass public void f_bc() { System.out.println("Test1.f_bc()"); } @Test public void test_m1() { System.out.println("Test1.test_m1()"); } }
public class Test2 { @BeforeSuite public void f_bs() { System.out.println("Test2.f_bs()"); } @BeforeTest public void f_bt() { System.out.println("Test2.f_bt()"); } @BeforeClass public void f_bc() { System.out.println("Test2.f_bc()"); } @Test public void test_m2() { System.out.println("Test1.test_m2()"); } }
如果XML文件同时运行两个测试类:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1"> <test name="test1" verbose="2"> <classes> <class name="sea.Test1" /> <class name="sea.Test2" /> </classes> </test> </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个测试类:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1"> <test name="test1" verbose="2"> <classes> <class name="sea.Test1" /> </classes> </test> </suite>
那么运行结果为如下,可见只有Test1类中定义的BeforeSuite、BeforeTest被执行了:
Test1.f_bs() Test1.f_bt() Test1.f_bc() Test1.test_m1() PASSED: test_m1
如果把两个测试类放在不同的Test中,那么他们的BeforeTest也是被单独执行的:
<?xml version="1.0" encoding="UTF-8"?> <suite name="suite1"> <test name="test1" verbose="2"> <classes> <class name="sea.Test1" /> </classes> </test> <test name="test2" verbose="2"> <classes> <class name="sea.Test2" /> </classes> </test> </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
相关文章推荐
- Field 'id' doesn't have a default value
- LeetCode 96.Unique Binary Search Trees
- UIScrollView基本使用(一)
- Increasing Triplet Subsequence
- UIButton、UITextField、UISlider、UISwitch、UISegmentedControl
- HDU 1242 Rescue(图)
- 笔记3:FileWebRequest 与 FileWebResponse
- POJ 2031 Building a Space Station(最小生成树)
- HDU_4069_SquigglySudoku(DancingLinksX精确覆盖+BFS)
- Leetcode:63. Unique Paths II
- android UI(1)-PopupWindow
- Leetcode:62. Unique Paths
- 安卓handler
- How to solve Dell laptops fan issues in Ubuntu
- String、StringBuffer和StringBuider
- Druid数据库连接池的使用
- [Nordic][nRF51822][Build Break] identifier "GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS" is undefined
- 2016 UESTC Training for Data Structures 题解
- UIIMage与CGImage的关系
- Tab Bar Item