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

发表于:2021-11-11 09:21

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  实操演示 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 的顺序
  · 继承顺序
  · 套件之间的顺序

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号