欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
原文出处: oKong

媒介

前面写了这么多章节,都是通过欣赏器会见的形式,举办接口要了解见进而验证要领的正确与否。显然在处事可能接口较量少时,这么做没有啥问题,但一旦一个项目稍微巨大可能接口要领较量多时,这么验证就有点不切合措施猿的懒人的特性了。所以这章节,报告下SpringBoot中的单位测试及基于Contiperf压测东西举办机能测试相关方面的常识点。

单位测试

是指对软件中的最小可测试单位举办查抄和验证。一般上在开拓阶段可能措施宣布时,城市操作像Maven这样的打包东西举办打包前的测试,制止不须要的bug措施被打包陈设。

题外话:在开拓阶段,都应该要求编写单位测试,焦点的模块还需要举办包围测试,包围率至少要95%以上。

SpringBoot的单位测试

对付java开拓者而言,Junit应该无人不知了。所以SpringBoot也是基于Junit举办单元测试的。

0.插手pom依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

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,如本例所示的:

示例

/**
 * 编写接口测试类
 * @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,运行即可。

测试功效

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", msg)).andDo(print()).andExpect(status().isOk())
        .andReturn();
        
        //断言 是否和预期相等
        Assert.assertEquals(msg, result.getResponse().getContentAsString());

    }
}