51Testing软件测试论坛
标题:
如何利用 xUnit 框架对测试用例进行维护?2
[打印本页]
作者:
lsekfe
时间:
2021-11-11 13:52
标题:
如何利用 xUnit 框架对测试用例进行维护?2
实操演示 2
现在将子类中的方法名进行修改,使其与父类方法名不同,再运行子类:
[attach]135216[/attach]
运行结果:
我是 @BeforeClass,我是第一步
我是 Children@BeforeClass,我是第一步
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoB
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoA
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
...
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoC
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoA
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
...
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoB
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoC
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 Children@AfterClass,我是最后一步
我是 @AfterClass,我是最后一步
复制代码
2.7
测试
套件
· RunWith
· SuiteClasses
· class
实操演示
新建一个子类 Junit4DemoChildren2Test,继承 Junit4DemoTest
[attach]135217[/attach]
再建一个测试类 SuitesTest, 写上注解 @RunWith(Suite.class), 表明这是一个测试套件,是多个测试类的一个集合,一个容器;
然后利用注解 @Suite.SuiteClasses 来设置测试类集合,设置测试类执行的顺序。
[attach]135218[/attach]
运行结果:
[attach]135219[/attach]
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
Children2 testDemoC
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
Children2 testDemoB
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
Children2 testDemoA
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
...
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
testDemoA
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
...
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
testDemoB
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children2@Before,用例执行前先到我这
testDemoC
我是 Children2@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 Children2@AfterClass,我是最后一步
我是 @AfterClass,我是最后一步
我是 @BeforeClass,我是第一步
我是 @Before,用例执行前先到我这
testDemoA
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
...
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
testDemoB
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
testDemoC
我是 @After, 用例执行后到我这
我是 @AfterClass,我是最后一步
我是 @BeforeClass,我是第一步
我是 Children@BeforeClass,我是第一步
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoB
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoA
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
...
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
Children testDemoC
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoA
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
...
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoB
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 @Before,用例执行前先到我这
我是 Children@Before,用例执行前先到我这
testDemoC
我是 Children@After, 用例执行后到我这
我是 @After, 用例执行后到我这
我是 Children@AfterClass,我是最后一步
我是 @AfterClass,我是最后一步
我是 @BeforeClass,我是第一步
我是 Children2@BeforeClass,我是第一步
复制代码
由测试结果可以看到使用套件后,测试过程为 Junit4DemoChildren2Test、Junit4DemoTest、Junit4DemoChildrenTest 的顺序执行
2.8 分组测试-@Category
有时候我们需要对一些特定的用例进行分组测试,这个时候就可以用@Category来实现。
另外在套件执行类上运用注解:
@RunWith(Categories.class) : 固定写法,指明以 Category 方式分组
@Categories.IncludeCategory(SlowGroup.class) : 指明要执行的测试分组包含哪些
@Categories.ExcludeCategory(FastGroup.class) : 指明要执行的测试分组不包含哪些
@Suite.SuiteClasses({ : 指明要执行的测试类
TestDemo.class
})
复制代码
@Category分组需要给定一个标签,以类或者接口都可以,这里创建连个接口SlowGroup和FastGroup
public interface FastGroup {
}
public interface SlowGroup {
}
复制代码
在用例上分别分组为SlowGroup、FastGroup和SlowGroup+FastGroup
[attach]135220[/attach]
指明SlowGroup组测试执行,FastGroup组的测试不执行:
[attach]135222[/attach]
测试结果:
[attach]135223[/attach]
仅指明SlowGroup组测试执行。
[attach]135224[/attach]
测试结果:
[attach]135225[/attach]
仅指明不执行的组为FastGroup。
[attach]135226[/attach]
测试结果:
[attach]135227[/attach]
2.9 参数化 @Paramterized
有时候我们需要传入测试数据,且数据可能是多组,这个时候就需要使用参数化来传入多组数据进行测试
Junit4 的参数化稍微有点麻烦:
1)先在类名上加入注解@RunWith(Parameterized.class)表明要以参数化运行。
[attach]135228[/attach]
2)用注解@Parameterized.Parameters来设定数据源。
[attach]135229[/attach]
3)最后用注解 @Parameterized.Parameter 来指定数据源数据对应的参数。
[attach]135230[/attach]
4)总览
[attach]135231[/attach]
测试结果:
[attach]135232[/attach]
从测试结果可以看到 3 组参数分别传入方法中,方法各执行了一次,完成参数化测试。
3、总结-测试用例的顺序
· 测试用例之间的顺序
· test fixtures 的顺序
· 继承顺序
· 套件之间的顺序
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2