首先介绍下在Idea中如何安装Juni插件:
1. 安装JUnitGenerator V2.0
在idea中,打开File-Setting-Plugins,在右侧弹出的搜索框中搜索JUnitGenerator V2.0,安装之后重启idea。
2. 设置JUnitGenerator V2.0的属性
在idea中,打开File-Setting-Other Settings-JUnitGenerator
a) 在properties框中,将OutputPath改为 ${SOURCEPATH}/../../test/${PACKAGE}/${FILENAME},将默认template改为Junit4。
b) 在Junit4框中,将package test.$entry.packageName; 改为 package $entry.packageName;
3. 进入想测试的类中,单击鼠标右键-Generator-junit4,能生成你要的测试类,具体的细节可以自己调整。
接下来,看下使用maven的工程如何来编写单元测试代码.主要介绍JUnit,JMockit,Spring-test以及groboutils-core框架
使用Junit4+JMockit进行单元测试的依赖如下:
JMockit有两种测试方式,一种是基于行为的,一种是基于状态的测试。
通俗点讲,基于行为的mock,就是对mock目标代码的行为进行模仿,更像黑盒测试。基于状态的mock,是站在目标测试代码内部的。可以对传入的参数进行检查、匹配,才返回某些结果,类似白盒。
使用JMockit构建单元测试的例子如下:
基于行为的mock:
基于状态的mock:
1. 安装JUnitGenerator V2.0
在idea中,打开File-Setting-Plugins,在右侧弹出的搜索框中搜索JUnitGenerator V2.0,安装之后重启idea。
2. 设置JUnitGenerator V2.0的属性
在idea中,打开File-Setting-Other Settings-JUnitGenerator
a) 在properties框中,将OutputPath改为 ${SOURCEPATH}/../../test/${PACKAGE}/${FILENAME},将默认template改为Junit4。
b) 在Junit4框中,将package test.$entry.packageName; 改为 package $entry.packageName;
3. 进入想测试的类中,单击鼠标右键-Generator-junit4,能生成你要的测试类,具体的细节可以自己调整。
接下来,看下使用maven的工程如何来编写单元测试代码.主要介绍JUnit,JMockit,Spring-test以及groboutils-core框架
使用Junit4+JMockit进行单元测试的依赖如下:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.21</version>
</dependency>
JMockit有两种测试方式,一种是基于行为的,一种是基于状态的测试。
通俗点讲,基于行为的mock,就是对mock目标代码的行为进行模仿,更像黑盒测试。基于状态的mock,是站在目标测试代码内部的。可以对传入的参数进行检查、匹配,才返回某些结果,类似白盒。
使用JMockit构建单元测试的例子如下:
基于行为的mock:
@RunWith(JMockit.class)
public class ServiceBehavier {
@Mocked
DAO dao = new DAO();
private Service service = new Service();
@Test
public void test() {
// 1. record 录制期望值
new Expectations() {
{
dao.getStoreCount(anyString);// mock这个方法,无论传入任何String类型的值,都返回同样的值,达到黑盒的效果
/**
* 预期结果,返回900
*/
result = 900;
/**
times能且只能调用1次。
*/
times = 1;
}
};
service.setDao(dao);
// 2. replay 调用
Assert.assertEquals(Status.NORMAL, service.checkStatus("D"));
//3.校验是否只调用了一次。如果上面注释的语句再调一次,且把录制的times改为2,那么在验证阶段将会报错。
new Verifications() {
{
dao.getStoreCount(anyString);
times = 1;
}
};
}
}
基于状态的mock:
public class