51Testing软件测试论坛

标题: 如何利用 xUnit 框架对测试用例进行维护?2 [打印本页]

作者: lsekfe    时间: 2021-11-11 13:52
标题: 如何利用 xUnit 框架对测试用例进行维护?2
实操演示 2
  现在将子类中的方法名进行修改,使其与父类方法名不同,再运行子类:
[attach]135216[/attach]
运行结果:
  1. 我是 @BeforeClass,我是第一步
  2.   我是 Children@BeforeClass,我是第一步
  3.   我是 @Before,用例执行前先到我这
  4.   我是 Children@Before,用例执行前先到我这
  5.   Children testDemoB
  6.   我是 Children@After, 用例执行后到我这
  7.   我是 @After, 用例执行后到我这
  8.   我是 @Before,用例执行前先到我这
  9.   我是 Children@Before,用例执行前先到我这
  10.   Children testDemoA
  11.   我是 Children@After, 用例执行后到我这
  12.   我是 @After, 用例执行后到我这
  13.   java.lang.AssertionError
  14.       at org.junit.Assert.fail(Assert.java:86)
  15.       at org.junit.Assert.assertTrue(Assert.java:41)
  16.       at org.junit.Assert.assertTrue(Assert.java:52)
  17.       ...
  18.       at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
  19.       at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
  20.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  21.   我是 @Before,用例执行前先到我这
  22.   我是 Children@Before,用例执行前先到我这
  23.   Children testDemoC
  24.   我是 Children@After, 用例执行后到我这
  25.   我是 @After, 用例执行后到我这
  26.   我是 @Before,用例执行前先到我这
  27.   我是 Children@Before,用例执行前先到我这
  28.   testDemoA
  29.   我是 Children@After, 用例执行后到我这
  30.   我是 @After, 用例执行后到我这
  31.   java.lang.AssertionError
  32.       at org.junit.Assert.fail(Assert.java:86)
  33.       at org.junit.Assert.assertTrue(Assert.java:41)
  34.       at org.junit.Assert.assertTrue(Assert.java:52)
  35.       ...
  36.       at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
  37.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  38.   我是 @Before,用例执行前先到我这
  39.   我是 Children@Before,用例执行前先到我这
  40.   testDemoB
  41.   我是 Children@After, 用例执行后到我这
  42.   我是 @After, 用例执行后到我这
  43.   我是 @Before,用例执行前先到我这
  44.   我是 Children@Before,用例执行前先到我这
  45.   testDemoC
  46.   我是 Children@After, 用例执行后到我这
  47.   我是 @After, 用例执行后到我这
  48.   我是 Children@AfterClass,我是最后一步
  49.   我是 @AfterClass,我是最后一步
复制代码
2.7测试套件
  · RunWith
  · SuiteClasses
  · class
  实操演示
  新建一个子类 Junit4DemoChildren2Test,继承 Junit4DemoTest
[attach]135217[/attach]
再建一个测试类 SuitesTest, 写上注解 @RunWith(Suite.class), 表明这是一个测试套件,是多个测试类的一个集合,一个容器;
  然后利用注解 @Suite.SuiteClasses 来设置测试类集合,设置测试类执行的顺序。
[attach]135218[/attach]

运行结果:
[attach]135219[/attach]
  1. 我是 @Before,用例执行前先到我这
  2.   我是 Children2@Before,用例执行前先到我这
  3.   Children2 testDemoC
  4.   我是 Children2@After, 用例执行后到我这
  5.   我是 @After, 用例执行后到我这
  6.   我是 @Before,用例执行前先到我这
  7.   我是 Children2@Before,用例执行前先到我这
  8.   Children2 testDemoB
  9.   我是 Children2@After, 用例执行后到我这
  10.   我是 @After, 用例执行后到我这
  11.   我是 @Before,用例执行前先到我这
  12.   我是 Children2@Before,用例执行前先到我这
  13.   Children2 testDemoA
  14.   我是 Children2@After, 用例执行后到我这
  15.   我是 @After, 用例执行后到我这
  16.   java.lang.AssertionError
  17.       at org.junit.Assert.fail(Assert.java:86)
  18.       at org.junit.Assert.assertTrue(Assert.java:41)
  19.       ...
  20.       at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
  21.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  22.   我是 @Before,用例执行前先到我这
  23.   我是 Children2@Before,用例执行前先到我这
  24.   testDemoA
  25.   我是 Children2@After, 用例执行后到我这
  26.   我是 @After, 用例执行后到我这
  27.   java.lang.AssertionError
  28.       at org.junit.Assert.fail(Assert.java:86)
  29.       at org.junit.Assert.assertTrue(Assert.java:41)
  30.       ...
  31.       at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
  32.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  33.   我是 @Before,用例执行前先到我这
  34.   我是 Children2@Before,用例执行前先到我这
  35.   testDemoB
  36.   我是 Children2@After, 用例执行后到我这
  37.   我是 @After, 用例执行后到我这
  38.   我是 @Before,用例执行前先到我这
  39.   我是 Children2@Before,用例执行前先到我这
  40.   testDemoC
  41.   我是 Children2@After, 用例执行后到我这
  42.   我是 @After, 用例执行后到我这
  43.   我是 Children2@AfterClass,我是最后一步
  44.   我是 @AfterClass,我是最后一步
  45.   我是 @BeforeClass,我是第一步
  46.   我是 @Before,用例执行前先到我这
  47.   testDemoA
  48.   我是 @After, 用例执行后到我这
  49.   java.lang.AssertionError
  50.       at org.junit.Assert.fail(Assert.java:86)
  51.       at org.junit.Assert.assertTrue(Assert.java:41)
  52.       ...
  53.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  54.   我是 @Before,用例执行前先到我这
  55.   testDemoB
  56.   我是 @After, 用例执行后到我这
  57.   我是 @Before,用例执行前先到我这
  58.   testDemoC
  59.   我是 @After, 用例执行后到我这
  60.   我是 @AfterClass,我是最后一步
  61.   我是 @BeforeClass,我是第一步
  62.   我是 Children@BeforeClass,我是第一步
  63.   我是 @Before,用例执行前先到我这
  64.   我是 Children@Before,用例执行前先到我这
  65.   Children testDemoB
  66.   我是 Children@After, 用例执行后到我这
  67.   我是 @After, 用例执行后到我这
  68.   我是 @Before,用例执行前先到我这
  69.   我是 Children@Before,用例执行前先到我这
  70.   Children testDemoA
  71.   我是 Children@After, 用例执行后到我这
  72.   我是 @After, 用例执行后到我这
  73.   java.lang.AssertionError
  74.       at org.junit.Assert.fail(Assert.java:86)
  75.       at org.junit.Assert.assertTrue(Assert.java:41)
  76.       at org.junit.Assert.assertTrue(Assert.java:52)
  77.       ...
  78.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  79.   我是 @Before,用例执行前先到我这
  80.   我是 Children@Before,用例执行前先到我这
  81.   Children testDemoC
  82.   我是 Children@After, 用例执行后到我这
  83.   我是 @After, 用例执行后到我这
  84.   我是 @Before,用例执行前先到我这
  85.   我是 Children@Before,用例执行前先到我这
  86.   testDemoA
  87.   我是 Children@After, 用例执行后到我这
  88.   我是 @After, 用例执行后到我这
  89.   java.lang.AssertionError
  90.       at org.junit.Assert.fail(Assert.java:86)
  91.       at org.junit.Assert.assertTrue(Assert.java:41)
  92.       ...
  93.       at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  94.   我是 @Before,用例执行前先到我这
  95.   我是 Children@Before,用例执行前先到我这
  96.   testDemoB
  97.   我是 Children@After, 用例执行后到我这
  98.   我是 @After, 用例执行后到我这
  99.   我是 @Before,用例执行前先到我这
  100.   我是 Children@Before,用例执行前先到我这
  101.   testDemoC
  102.   我是 Children@After, 用例执行后到我这
  103.   我是 @After, 用例执行后到我这
  104.   我是 Children@AfterClass,我是最后一步
  105.   我是 @AfterClass,我是最后一步
  106.   我是 @BeforeClass,我是第一步
  107.   我是 Children2@BeforeClass,我是第一步
复制代码
由测试结果可以看到使用套件后,测试过程为 Junit4DemoChildren2Test、Junit4DemoTest、Junit4DemoChildrenTest 的顺序执行
  2.8 分组测试-@Category
  有时候我们需要对一些特定的用例进行分组测试,这个时候就可以用@Category来实现。
  另外在套件执行类上运用注解:
  1. @RunWith(Categories.class)  :  固定写法,指明以 Category 方式分组
  2.   @Categories.IncludeCategory(SlowGroup.class) : 指明要执行的测试分组包含哪些
  3.   @Categories.ExcludeCategory(FastGroup.class) : 指明要执行的测试分组不包含哪些
  4.   @Suite.SuiteClasses({ : 指明要执行的测试类
  5.       TestDemo.class
  6.   })
复制代码
@Category分组需要给定一个标签,以类或者接口都可以,这里创建连个接口SlowGroup和FastGroup

  1.  public interface FastGroup {
  2.   }
  3.   public interface SlowGroup {
  4.   }
复制代码
在用例上分别分组为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