Junit的几个实用功能介绍

发表于:2018-12-20 13:28

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

 作者:思与学    来源:CSDN

  Junit有不少实用的功能,如组合(SuiteClasses)、分类(Category)、排序(FixMethodOrder),可以通过使用这些功能,灵活的组合单元测试,按照自己的需求批量、分类、有序的进行执行,下面来看下具体的用法。
  以下示例是在spring-boot的基础上跑的,源码地址rest-base.
  一、Junit依赖
  要使用上述全部功能,版本建议选择4.12(spring 2.5.6确定不能使用了,该版本只能使用junit4.4).
  二、实现方式
  以下为一个具体示例:
   // 1
  @RunWith(Categories.class)
  @Suite.SuiteClasses({OrderServiceTest.class,OrderServiceTest.class})
  @IncludeCategory(UnifiedOrderTaskTests.class)
  public class OrderServiceTestSuit {
  }
  // 2
  /**
  * 单元测试分类标记,用于标记统一订单改造相关方法
  */
  public interface UnifiedOrderTaskTests {
  }
  // 3
  @RunWith(SpringJUnit4ClassRunner.class)
  @SpringBootTest(classes=BaseApplication.class)
  @FixMethodOrder(MethodSorters.NAME_ASCENDING)
  public class OrderServiceTest {
  @Category(UnifiedOrderTaskTests.class)
  @Test
  public void testInsert(){
  System.err.println("test insert");
  }
  @Category(UnifiedOrderTaskTests.class)
  @Test
  public void testQuery(){
  System.err.println("test query");
  }
  @Test
  public void testQuery2(){
  System.err.println("test query 2");
  }
  }
  @RunWith(SpringJUnit4ClassRunner.class)
  @SpringBootTest(classes=BaseApplication.class)
  @FixMethodOrder(MethodSorters.NAME_ASCENDING)
  public class OrderService2Test {
  @Category(UnifiedOrderTaskTests.class)
  @Test
  public void testInsert(){
  System.err.println("OrderService2 test insert");
  }
  @Test
  public void testQuery(){
  System.err.println("OrderService2 test query");
  }
  @Category(UnifiedOrderTaskTests.class)
  @Test
  public void testQuery2(){
  System.err.println("OrderService2 test query 2");
  }
  }
  当在OrderServiceTestSuit上运行单元测试时,控制台输出结果如下:
  test insert
  test query
  OrderService2 test insert
  OrderService2 test query 2
  通过控制台结果可以看出:
  * 两个单元测试同时运行,实现了组合效果
  * 添加了Category注解的方法才会运行,实现了分类效果
  * 单元测试方法有序执行,实现了有序执行的效果
  下面来看下其具体实现。
  组合
  主要依赖 @Suite.SuiteClasses 注解,其参数是一个Class数组,用于指定组合运行的多个单元测试类。
  分类
  一个场景:某个service方法的单元测试里已经有了10个方法,新增业务时添加了10个方法,执行单元测试时只想运行新的部分,那就可以通过声明一个接口作为类型,只运行该接口标记的单元测试方法,具体步骤如下:
  1. 声明标识接口,如上例中的UnifiedOrderTaskTests
  2. 在对应的方法上添加注解@Category(UnifiedOrderTaskTests.class)
  3. 在组合类上添加@RunWith(Categories.class)
  4. 在类上添加@IncludeCategory(UnifiedOrderTaskTests.class)指明只有标记为UnifiedOrderTaskTests的方法才运行。
  有序
  主要是通过@FixMethodOrder注解指定,其参数有三种选择:
  1. MethodSorters.JVM 根据JVM获取顺序执行,我在jdk1.7上执行,并不是方法声明的顺序
  2. MethodSorters.DEFAULT Sorts the test methods in a deterministic, but not predictable, order() (以确定但不可预期的顺序执行)
  3. MethodSorters.NAME_ASCENDING 按方法名字母顺序执行,有先后依赖的方法,可以适当调整方法名称来达到先后执行的目的

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号