lsekfe 发表于 2021-11-11 13:52:33

如何利用 xUnit 框架对测试用例进行维护?2

实操演示 2
  现在将子类中的方法名进行修改,使其与父类方法名不同,再运行子类:

运行结果:
我是 @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

再建一个测试类 SuitesTest, 写上注解 @RunWith(Suite.class), 表明这是一个测试套件,是多个测试类的一个集合,一个容器;
  然后利用注解 @Suite.SuiteClasses 来设置测试类集合,设置测试类执行的顺序。


运行结果:

我是 @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

指明SlowGroup组测试执行,FastGroup组的测试不执行:

测试结果:

仅指明SlowGroup组测试执行。

 测试结果:

仅指明不执行的组为FastGroup。

 测试结果:

2.9 参数化 @Paramterized
  有时候我们需要传入测试数据,且数据可能是多组,这个时候就需要使用参数化来传入多组数据进行测试
  Junit4 的参数化稍微有点麻烦:
  1)先在类名上加入注解@RunWith(Parameterized.class)表明要以参数化运行。

2)用注解@Parameterized.Parameters来设定数据源。

3)最后用注解 @Parameterized.Parameter 来指定数据源数据对应的参数。

4)总览

 测试结果:

从测试结果可以看到 3 组参数分别传入方法中,方法各执行了一次,完成参数化测试。
  3、总结-测试用例的顺序
  · 测试用例之间的顺序
  · test fixtures 的顺序
  · 继承顺序
  · 套件之间的顺序

页: [1]
查看完整版本: 如何利用 xUnit 框架对测试用例进行维护?2