Mock单元测试
现有如下API接口:
请求方式:POST
请求体:{'username':'admin','password':'admin'}
返回状态码:200成功
先介绍两款简单使用的客户端产品
如下所示。即可对接口进行测试
查看响应:
同理,easy
重点介绍SpringBoot环境下的MockAPI接口测试
Mock单元测试
pom文件中加入如下依赖
@RequestMapping(value='/login',method=RequestMethoPOST)publicResponseBeanauthLogin(@RequestBodyLoginVologi{if(login==nulthrownewClientException(ErrorCodAPI_EC_CLIENT_EXCEPTIO;if(StringUtils.isEmpty(logigetUsername()))thrownewClientException(ErrorCodAPI_EC_CLIENT_EXCEPTIO;if(StringUtils.isEmpty(logigetPassword()))thrownewClientException(ErrorCodAPI_EC_CLIENT_EXCEPTIO;
LoginResultBeantoken=userServiclogin(logi;returnResponseBeasuccess(toke;}编写Mock测试类
@RunWith(SpringRunner.class)@SpringBootTest(classes={LoginController.class,MockServletContext.class})@EnableAutoConfiguration@ComponentScan(basePackages={'cooffc*'})@WebAppConfiguration##声明测试加载WebApplicationContextpublicclassLoginTest{@AutowiredWebApplicationContextwebApplicationContext;
@BeforepublicvoidSetUp(){this.mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext).build();}
@Testpublicvoidlogin()throwsException{RequestBuilderrequest=null;LoginVologinVo=newLoginVo();loginVo.setUsername('admin');loginVo.setPassword('admin');##构造请求体JSON格式StringLoginVoJson=JSONObject.toJSONString(loginVo);request=MockMvcRequestBuilders.post('/v1/login').contentType(MediaTypAPPLICATION_JSO.content(LoginVoJso;
StringrequestJson=mockMvperform(request).andDo(print()).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
}}这里注意一下,最开始看网上SetUp()方法中这样写,坑!:
mockMvc=MockMvcBuilders.standaloneSetup(newLoginController()).build();然后没有WebApplicationContext属性
直接报空指针异常,这是由于接口测试需要全局上下文。。。。
启动测试类,显示测试通过
swgger可以不仅可以测试,还可以生成API接口文档
pom文件中加入如下依赖
编写Swagger配置
@Configuration@EnableSwagger2publicclassSwaggerConfigextendsWebMvcConfigurerAdapter{
@Value('${swagger.host}')privateStringswaggerHost;ApiInfoapiInfo(){returnnewApiInfoBuilder().title('swagger接口文档').description('基于shiro和jwt的前后端分离权限系统').termsOfServiceUrl('').version('v1').contact(newContact('','','')).build();}
@BeanpublicDocketcreateRestApi(){ParameterBuilderbuilder=newParameterBuilder();Parameterparameter=builder//从cookie中获取tokeparameterType('cookie')//参数类型支持header,cookie,body,queryetname('token')//参数名.defaultValue('')//默认值.description('请输入token').modelRef(newModelRef('string'))//指定参数值的类型.required(fals.build();//非必需,这里是全局配置,然而在登陆的时候是不用验证的List
/***swaggerui资源映射*@paramregistry*/@OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry.addResourceHandler('swagger-uhtml').addResourceLocations('classpath:/META-INF/resources/');registry.addResourceHandler('/webjars*').addResourceLocations('classpath:/META-INF/resources/webjars/');}
/***swagger-uhtml路径映射,浏览器中使用/api-docs访问*@paramregistry*/@OverridepublicvoidaddViewControllers(ViewControllerRegistryregistry){registry.addRedirectViewController('/api-docs','/swagger-uhtml');}}启动项目,输入http://localhost:60000/swagger-uhtml得到项目下所有接口信息
进行接口测试
文章为作者独立观点,不代表股票交易接口观点