JUnit最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CardServiceTest {
    /**
     * 最佳实践:
     * 1. 测试方法上必须使用@Test进行修饰
     * 2. 测试方法必须使用public void 进行修改,不能带任何的参数
     * 3. 新建一个源代码目录存放我们的测试代码,测试类的包和被测试的一致
     * 4. 测试单元中每个方法必须独立测试,不能有任何依赖
     * 5. 测试类使用Test作为后缀,测试方法使用Test作为后缀(看个人喜好) 
     */
     
    @Test
    public void addTest(){
        // 使用断言
        assertEquals(6, new CardService().add(3,3));
    }
     
}
如下目录结构


运行结果说明


1. Failure 一般由于单元测试使用的断言方法判断失败所引起的,就是说程序输出的结果和我们预期的不一样。
2. Errors 是由代码异常引起的,可能是测试代码本身错误或是被测试代码中的bug。
3. 一切都成功进度条显示绿色
PS:测试用户不是用来证明你是对的,用来证明你没有错

JUnit常用注解说明

1. @BeforeClass修饰的方法会在所有方法被调用前执行,该方法是静态的,测试类被加载就会运行它,而且内存中只有一个实例存在,它比较适合加载配置文件等。
2. @AfterClass所修饰的方法通常用来对资源的清理,如管理数据库的连接等
3. @Before和@After会在每个测试方法的前后各执行一次。
4. @Test 将一个普通的方法修饰成一个测试方法
    @Test(expected=XX.class) -预测的异常
    @Test(timeout=2000) - 单位毫秒
5. @Ignore 会被测试运行器忽略
6. @RunWith 可以更改测试运行器 org.junit.runner.Runner

JUnit4中的测试套件

1
2
3
4
5
6
7
8
9
10
@RunWith(Suite.class)
@Suite.SuiteClasses({ EquipmentServiceTest.class, UserServiceTest.class })
public class CardServiceTest {
    /**
     * 测试套件就是组织测试类一起运行
     * 1. 写一个作为测试套件的入口类,这个类里不包含其他方法
     * 2. 更改测试类的运行器Suite.class
     * 3. 将要测试的类作为数组传入到Suite.SuiteClass({})
     */
}   

JUnit4的参数化设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@RunWith(Parameterized.class)
public class CardServiceTest {
    /**
     * 1. 更改默认的测试运行器为@RunWith(Parameterized.class)
     * 2. 声明变量来存放预期值和结果值
     * 3. 声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
     * 4. 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
     */
    int expected = 0;
    int input1 = 0;
    int input2 = 0;
 
    @Parameters
    public static Collection<Object[]> t() {
        return Arrays.asList(new Object[][] { { 3, 1, 2 }, { 4, 2, 2 } });
    }
 
    public CardServiceTest(int expected, int input1, int input2) {
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }
 
    @Test
    public void addTest() {
        // 会运行两次,数值分别是上面@Parameters声明的数值
        assertEquals(expected, new CardService().add(input1, input2));
    }
}

参考:慕课网    

JUnit4快速入门的更多相关文章

  1. Java 单元测试 JUnit4 快速入门

    JUnit最佳实践 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class CardServiceTest {     /**      * 最佳 ...

  2. SpringMvc_快速入门,深入分析

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  3. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  4. Spring_MVC_教程_快速入门_深入分析

    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...

  5. Activiti第一篇【介绍、配置开发环境、快速入门】

    Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...

  6. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  7. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  8. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  9. Spring Boot 2.x 快速入门(上)HelloWorld示例

    本文重点 最近决定重新实践下Spring Boot的知识体系,因为在项目中遇到的总是根据业务需求走的知识点,并不能覆盖Spring Boot完整的知识体系,甚至没有一个完整的实践去实践某个知识点.最好 ...

随机推荐

  1. Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》

    一.ScrollView 由于手机屏幕的高度有限,当普通布局放不下现实和的内容时,ScrollView视图(滚动视图)就会派上用场,因为数据可以往下滚动显示. 二.HorizontalScrollVi ...

  2. Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题

    本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...

  3. Unity3d导出场景地图寻路

    Unity3d导出场景地图寻路(金庆的专栏)Unity3d中用无渲染的透明盒子摆出地面和阻档区域.        this.renderer.enabled = false;所有这些盒子设为Navig ...

  4. 有无序的实数列V[N],要求求里面大小相邻的实数的差的最大值,关键是要求线性空间和线性时间。

    int findMaxDifBt2Nums(int* arr, int len) { int maxItem = arr[0], minItem = arr[0]; for (int i = 1; i ...

  5. Dynamics CRM2016 Web API之Retrieve Multiple

    之前的博文只介绍了通过记录的primary key来查询单条记录或者单个属性值,本篇介绍多条记录的查询方法 var filter = "?$filter=name eq '123'" ...

  6. tomcat启动批处理——setclasspath.bat

    除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ************************* ...

  7. Anakia 转换xml文档为其他格式

    一.简介 Anakia 使用JDOM 和Velocity将XML文档转换为特定格式的文档 二.解析xml文档方法 1.DOM java jdk,xml-api.jar 需要加载整个xml文档来构建层次 ...

  8. 6.3、Android Studio的CPU Monitor

    Android Monitor包含一个CPU Monitor,可以让你非常方便的监测你的应用的CPU的使用.它显示试试的CPU使用. 在CPU Monitor显示正在运行的应用 1. 打开一个项目 2 ...

  9. [ExtJS5学习笔记]第二十三节 Extjs5中表格gridpanel的列格式设置

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39665979 官方文档:http://docs.sencha.com/extjs/5. ...

  10. SSH深度历险(十一) AOP原理及相关概念学习+xml配置实例(对比注解方式的优缺点)

    接上一篇 SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP,本篇我们主要是来学习使用配置XML实现AOP 本文采用强制的CGLB代理方式 Security ...