junit几个实用功能

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 按方法名字母顺序执行,有先后依赖的方法,可以适当调整方法名称来达到先后执行的目的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,935评论 6 342
  • 转:http://www.jianshu.com/p/d5fca0185e83 Xcode测试 前言 总算在今天把...
    测试小蚂蚁阅读 2,984评论 0 20
  • ​​说道强者,每个人都会情不自禁的的竖起大拇指,因为他们做到了我们没有做到的事,所以我们敬佩他。 今天有一位强者,...
    你的课大数据时代阅读 268评论 0 0
  • 九曲黄河第一湾,蜿蜿蜒蜒到天边。奔流不息的黄河,诞生了源远流长的华夏文明。从三江源流过阿坝若尔盖县唐克镇,带来了丰...
    光行天下阅读 489评论 0 1