java 单元测试_SpringBoot|第十三章:测试相关(单元测试、性能测试)

前言

前面写了这么多章节,都是通过浏览器访问的形式,进行接口方法访问进而验证方法的正确与否。显然在服务或者接口比较少时,这么做没有啥问题,但一旦一个项目稍微复杂或者接口方法比较多时,这么验证就有点不符合程序猿的懒人的特性了。所以这章节,讲述下SpringBoot中的单元测试及基于Contiperf压测工具进行性能测试相关方面的知识点。

单元测试

是指对软件中的最小可测试单元进行检查和验证。一般上在开发阶段或者程序发布时,都会利用像Maven这样的打包工具进行打包前的测试,避免不必要的bug程序被打包部署。

题外话:在开发阶段,都应该要求编写单元测试,核心的模块还需要进行覆盖测试,覆盖率至少要95%以上。

SpringBoot的单元测试

对于java开发者而言,Junit应该无人不知了。所以SpringBoot也是基于Junit进行单位测试的。

0.加入pom依赖。

org.springframework.boot

spring-boot-starter-test

test

1.这里为了演示,编写了一个简单的测试接口及编写对应的测试类。

UnitTestService.java

/**

* 测试接口类

* @author oKong

*

*/

public interface UnitTestService {

public String process(String msg);

}

实现类:UnitTestServiceImpl.java

@Service

public class UnitTestServiceImpl implements UnitTestService{

/**

* 为了测试,这里直接返回传入的值

*/

@Override

public String process(String msg) {

// TODO Auto-generated method stub

return msg;

}

}

测试类:UnitTestServiceTest.java

题外话:个人建议,每个测试类都应该和对应的被测试类包路径一致。同时测试类的名称是被测试的类名+Test,如本例所示的:

3dbc08a80102401c9342f40b08c3b77c

/**

* 编写接口测试类

* @author oKong

*

*/

@RunWith(SpringRunner.class)

//SpringBootTest 是springboot 用于测试的注解,可指定启动类或者测试环境等,这里直接默认。

@SpringBootTest

public class UnitTestServiceTest {

@Autowired

UnitTestService testService;

public void test() {

String msg = "this is a test";

String result = testService.process(msg);

//断言 是否和预期一致

Assert.assertEquals(msg, result);

}

}

  1. 运行右击,选择 run As –> Junit Test 或者需要debug时,选择Debug As –> Junit Test,运行即可。
0a1020b1e4ce4f64a89efb0d967bd973

3.至此,一个简单的单元测试就结束了。简单来说,写一个单元测试是容易的,但写好一个单元测试是难的。毕竟,每个程序猿都觉得自己的代码是没有问题的,难道不是吗?哈哈!

RESTful API 单元测试

对于服务类而言,编写单元测试是相对简单的,只需要像控制层自动引入接口类一样。但编写控制层即RESTful API 单元测试时,一般上就需要利用Mock技术进行测试了。当然也可以使用像Swagger或者PostMan这样的api测试工具进行测试(或者使用RestTemplate测试也是可行的),它可进行自动化测试,关于Postman会在之后的章节进行更新,作者也没有过多研究过,也只是用到了它的最基本的发起http请求的功能,之后会整理相关资料的。

0.创建一个RESTful接口服务。

/**

* 编写mock测试服务

* @author oKong

*

*/

@RestController

public class DemoController {

@GetMapping("/mock")

public String demo(String msg) {

return msg;

}

}

1.编写对应测试类

@RunWith(SpringRunner.class)

//SpringBootTest 是springboot 用于测试的注解,可指定启动类或者测试环境等,这里直接默认。

//因为是mock测试,在实际开发过程中,可指定其测试启动时为随机端口,避免了不必要的端口冲突。

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

//测试单一接口时 ,也可利用注解@WebMvcTest 进行单一测试

//@WebMvcTest(DemoController.class)

public class DemoControllerTest {

//使用 WebMvcTest 时使用

//@autowired mockMvc 是可自动注入的。

//当直接使用SpringBootTest 会提示 注入失败 这里直接示例利用 MockMvcBuilders工具创建

//@Autowired

MockMvc mockMvc;

@Autowired

WebApplicationContext wc;

@Before

public void beforeSetUp() {

this.mockMvc = MockMvcBuilders.webAppContextSetup(wc).build();

}

@Test

public void testDemo() throws Exception {

String msg = "this is a mock test";

MvcResult result = this.mockMvc.perform(get("/mock").param("msg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值