编写单元测试,测试你的代码
Posted 我爱看明朝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写单元测试,测试你的代码相关的知识,希望对你有一定的参考价值。
编写单元测试,测试你的代码
编写单元测试三步骤:
1.准备数据:db、mock第三方服务、MQ、redis、dubbo
2.调用测试方法
3.验证期望结果
依赖junit包
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.38</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.11.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
直接调用方法单测
public class MyServiceTest extends BaseTest {
@Autowired
private MyService myService;
/**
** 案例描述(选填): 验证执行sql是否正确
** 输入(必填): 输入id
** 过程(必填): 通过id在数据库查询用户的信息
** 期望(必填): 返回User对象的属性age = 23
** 数据表(选填):表: user
**
**/
@Test
public void queryByIdTest() {
//准备db数据
loadTestData("MyServiceTest.queryByIdTest")
//调用
Long id = -1000L;
User user = myService.queryById(id);
//验证
Assert.assertEquals(23, user.getAge());
}
}
期望异常
public class MyServiceTest extends BaseTest {
@Autowired
private MyService myService;
/**
** 案例描述(选填): 验证通过年龄查询用户,年龄非法
** 输入(必填): 输入非法年龄
** 过程(必填): 先校验年龄是否合规,再在数据库查询符合的用户
** 期望(必填): 抛异常
** 数据表(选填):表: user
**
**/
@Test(expected = BusinessRunTimeException.class)
public void queryByAgeTest() {
//准备db数据
loadTestData("MyServiceTest.queryByAge")
//调用
int age = -23;
List<User> userList = myService.queryByAge(age);
}
}
mock掉第三方系统
@service
public class MyService {
@Reference
private RightService rightService;
public List<String> queryUserRight(Long id) {
return rightService.getRights(id);
}
}
public class MyServiceTest extends BaseTest {
@Autowired
private MyService myService;
@mocked
private RightService rightService
/**
** 案例描述(选填): 根据id到第三方服务查询用户所属权限
** 输入(必填): 输入用户id
** 过程(必填): 去权限中心查询用户所属权限
** 期望(必填): 返回用户有view权限
** 数据表(选填):表: user, 第三方:权限中心
**
**/
@Test
public void queryUserRightTest() {
//准备db数据
loadTestData("MyServiceTest.queryUserRightTest")
mockUserRights();
//调用
Long id = -1000L;
List<String> rights = myService.queryUserRight(id);
//验证
Assert.assertTrue(rights.contains("view"));
}
private void mockUserRights() {
new Expectations() {{
//当传入值是-1000L返回mock的结果
rightService.getRights(-1000L)
//当传入任何值,都返回Mock结果
//rightService.getRights(anyLong)
// minTimes = 0; //至少被运行几次
result = Arrays.asList("view","update");
}}
}
}
以上是关于编写单元测试,测试你的代码的主要内容,如果未能解决你的问题,请参考以下文章