JUnit+JMockit单元测试

1、简介

  对编码完成的功能,进行测试,是每个程序员最熟悉不过的事了,每完成一部分功能,都需要对实现的功能进行测试,然后才能进行交付。但如何保证自己完成的每个功能都是正确无误的呢?对,单元测试

  2、JUnit

  2.1 pom中增加Junit的jar的依赖

  <dependency>

  <groupId>junit</groupId>

  <artifactId>junit</artifactId>

  <version>4.8.2</version>

  </dependency>

  2.2 增加单元测试类

  例如,要测试的类为src下的com.runqianapp.userManager.dao.UserDao类中的

  publicStringgetUserName(StringuserId)方法

  则首先新建一个test的源码目录,原因是测试代码要与原功能代码分离,自动构建的时候,只需要把原功能的代码构建到最新的jar里。然后新建跟被测试类相同的包路径,如

  test下的com.runqianapp.userManager.dao.UserDaoTest

  这样,就为UserDao建好了一个单元测试类,

  对于被测试的方法,需要传不同的参数,来检验方法的正确性,这个时候,不必写多个@Test来测试,而是把需要传入的参数放入配置文件,然后读配置文件。

  参数配置文件的位置是与单元测试类同一目录下,如

  test下com.runqianapp.userManager.dao.testData_UserDao

  2.3 JUnit的常用注解介绍

  2.3.1 @Test

  需要运行的单元测试方法,可以有多个

  2.3.2 @Before

  在每一个@Test方法运行之前都会被运行,可以用来初始化方法

  2.3.3 @Before

  在每一个@Test方法运行之后都会被运行,可以用来方法的释放资源

  2.3.4 @BeforeClass

  针对整个单元测试类,只会被运行一次,在所有方法运行之前被运行,可以用来初始化环境

  必须声明成staticvoid

  2.3.5 @AfterClass

  针对整个单元测试类,只会被运行一次,在所有方法运行之后被运行,可以用来释放资源

  必须声明成staticvoid

  2.4 断言

  对于需要测试的方法,用断言来判断其它执行结果是否正确。

  assertEquals([Stringmessage],expected,actual)

  message是个可选的消息,将会在发生错误时报告这个消息。

  expected是期望值,通常都是用户指定的内容。

  actual是被测试的代码返回的实际值。

  如:

  booleansuccess=update();

  assertEquals(“更新是否成功”,true,success)

  这样,当运行update()的返回值不为true的时候,这个单元测试就会失败。

  但有些时候,我们测试的方法并没有返回值,方法只是执行一个动作,那么这个时候,我们就不能用判断的返回值来判断方法是否执行成功。

  如新建文件的方法,publicvoidcreateFile(StringfilePath),这个时候,方法并没有返回值,我们在判断方法是否执行成功的时候,可以写一个辅助方法,来检查一下指定的文件是否新建成功了,以此来验证createFile()的准备性。如:


  createFile(“d:/a.txt”);

  booleanexist=fileExist(“d:/a.txt”);

  assertEquals(“新建文件”,true,exist);

  3、JMockit

  当我们在编写单元测试的时候,常常会出现一些如调用的方法需要其它对象提供,而这个类现在又不具备,如很难创建、没有环境、没有开发完等情况,这个时候,我们就需要用JMockit模拟出一个类,来满足我们的需求,来完成我们核心功能的测试。

  3.1 pom中增加JMockit的依赖


<dependency>

<groupId>jmockit</groupId>

<artifactId>jmockit</artifactId>

<version>1.0</version>

<scope>test</scope>

</dependency>

  3.2 模拟对象

  如需要测试的一个方法的一个值是配置在misInitConfig.xml中的,而misInitConfig.xml中的值需要用ReadConfInfo.getPropery()来获取,而ReadConfInfo是在应用启动时初始化的,这个时候并没有web环境,也不能初始化,而我们也不需要自己手动初始化ReadConfInfo,因为我们测试的重点不是ReadConfInfo,而是我们现有的功能。这个时候,我们就可以用JMockit模块出ReadConfInfo,来完成此功能的测试。


/**

*模拟ReadConfInfo

*/

publicstaticvoidmockReadConfInfo(){

newMockUp<ReadConfInfo>(){

@Mock

publicStringgetPropery(StringpropertyName){

if("conf_loglevel".equals(propertyName)){

return"debug";

}elseif("conf_logfolder".equals(propertyName)){

return"log";

}else{

return"";

}

}

}

}

  在单元测试的@BeforCalss中初始化,


/**

*初始化环境

*/

@BeforeClass

publicstaticvoidinit()throwsException{

//模拟ReadConfInfo

mockReadConfInfo();

}

  这样,我们就可以在程序中使用ReadConfInfo.getPropery()来完成我们的功能了。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-08 19:25:35

JUnit+JMockit单元测试的相关文章

Eclipse学习4-在Eclipse中使用JUnit进行单元测试(上)

使用JUnit进行测试 JUnit是与Eclipse一起提供的一个开源测试框架.在同一个Project中,可以创建与其它class无异的"基于JUnit"的class,并使用此JUnit代码去测试project中的其它class.JUnit的此种使用方式能够为每位在此应用程序上工作的人员构建一组标准的测试.如果当更改了应用程序代码以后,他们所需做的工作仅仅是点击几下按钮来验证此应用程序是否依然能够通过标准测试. JUnit被用来测试代码,并且它是由能够测试不同条件的断言方法(asser

JUnit和单元测试入门简介

JUnit和单元测试入门简介 1.几个相关的概念 白盒测试--把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的. 回归测试--软件或环境的修复或更正后的"再测试",自动测试工具对这类测试尤其有用. 单元测试--是最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节. JUnit --是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.他是用于单元测试框架体系xUnit的一个实例(用于java语言).主要

JUnit + Mockito 单元测试(二)(good)

  import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.List; import java.util.Map; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.

请问swing做的界面该怎么使用junit做单元测试呢?

问题描述 请问swing做的界面该怎么使用junit做单元测试呢? 解决方案 FEST-Swing是一个能够与JUnit集成的GUI测试框架.你可以研究研究.

junit测试单元测试swing 结果窗口只是闪一下就看不到了 求解。。

问题描述 junit测试单元测试swing 结果窗口只是闪一下就看不到了 求解.. 源代码: package com.Swing; import static org.junit.Assert.*; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JB

JUnit + Mockito 单元测试(一)

未接触 JUnit 之前,曾经对茫茫的代码不知所措--哪怕是自己写的--多写注释?重构代码?甚至为一个方法去写一篇技术文章来解释?--这些都是试过,感觉不是"控制代码"的可行之道,甚至说"徒劳"的.关于单元测试(Unit test),之前亦略有所闻,感觉用处不大,因为对一个方法检测返回的结果是否正确,--有点无聊--心想,我写的方法当然能返回预期的结果,这还有说?不至于那么低级的错误也犯得着吧!?于是对所谓测试的东东感觉简直就是在增加工作量--我把代码写漂亮点就行了

JUnit + Mockito 单元测试(二)

JUnit 是单元测试框架.Mockito 与 JUnit 不同,并不是单元测试框架(这方面 JUnit 已经足够好了),它是用于生成模拟对象或者直接点说,就是"假对象"的工具.两者定位不同,所以一般通常的做法就是联合 JUnit + Mockito 来进行测试. 入门 首先是配置 Mock 对象,看看例子怎么写的. List mock = mock( List.class ); when( mock.get(0) ).thenReturn( 1 ); assertEquals( &q

Android Junit Test 单元测试

单元测试有两种方法:根据具体情况而选择 1.在项目本身创建单元测试类,需要对项目清单文件:AndroidManifest.xml进行配置. 在<application></application>之间加<uses-library android:name="android.test.runner" /> 之后加 <instrumentation android:name="android.test.InstrumentationTes

Android中如何使用JUnit进行单元测试

在我们日常开发android app的时候,需要不断地进行测试,所以使用JUnit测试框架显得格外重要,学会JUnit可以加快应用的开发周期. Android中建立JUnit测试环境有以下两种方法. 一.直接在需要被测试的工程中新建测试类 集成步骤: 1.在androidManifest.xml文件中添加以下代码: <instrumentation android:name="android.test.InstrumentationTestRunner" android:targ