后端学习2.1:引入Junit,对接口做单元测试

这篇具有很好参考价值的文章主要介绍了后端学习2.1:引入Junit,对接口做单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要求

引入Junit,对接口做单元测试

本文将对在Springboot中如何使用Junit进行单元测试进行简单示例和介绍,项目的完整目录层次如下图所示:
(在和main文件夹同级的文件中有一个test文件,在其中添加对应的测试类,一般以testXXXX或XXXXTest命名)
后端学习2.1:引入Junit,对接口做单元测试

操作步骤:

1、添加依赖

<!--S        Junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
<!--E        Junit依赖-->
<!--S        springboot的测试框架,里面有对junit4的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--E        springboot的测试框架,里面有对junit4的依赖-->

2、对Controller层进行测试

在Springboot中可以通过TestRestTemplate对Controller进行测试;
目前遇到的是Controller中装配了其他Spring容器中的Bean这种情况,例如下面这个控制器,用到了com/example/demo/entity下的User。

@PostMapping(value = "/deleteUserInfo")
    public int deleteUser(@RequestBody User user) throws ServiceException{
        String userId = user.getUserId();
        if(userId==null || userId.equals("")){
            throw new ServiceException(500,"删除失败,请传入用户id");
        }else {
            List<User> users=service.queryByUserId(userId);
            if(users!=null && users.size()>0){
                int count = service.deleteUserInfo(userId);
                if(count>0){
                    return count;
                }else {
                    throw new ServiceException(500,"删除失败,请检查原因");
                }
            }else{
                throw new ServiceException(500,"删除失败,用户id不存在");
            }
        }
    }

此时除了要启动Spring容器,还需要启动内嵌的WEB环境,下面提供一种方法进行测试。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoControllerTest {
    //注入我要测试的对象
    @Autowired
    private TestRestTemplate template;

    CommonResult result;
    
    @Test
    public void testDeleteUser() {
        User user=new User();
        result = template.postForObject("http://localhost:8080/updateUserInfo",user, CommonResult.class);
        Assert.assertEquals(500, result.getCode());//错误用例,验证用户没传id

        user.setUserId("d36b1940247d4fb59d4851105d5vbbv");
        result = template.postForObject("http://localhost:8080/updateUserInfo",user, CommonResult.class);
        Assert.assertEquals(500, result.getCode());//错误用例,验证id不存在

        user.setUserId("ba8ca9a376614215985ba7d0b2ac4b10");
        result = template.postForObject("http://localhost:8080/updateUserInfo",user, CommonResult.class);
        Assert.assertEquals(500, result.getCode());//成功用例
    }
}

3、遇到的问题

  1. 控制台报错:no runnable method
    原因:test包导入错误
    //import org.junit.jupiter.api.Test;
import org.junit.Test;//正确的包
  1. 要保证template.postForObject/template.getForObject/template.postForEntity/template.getForEntity返回结果和前面的变量类型对应

4、知识点

1.GET类型

1.1getForEntity

public <T> T getForEntity(String url, Class<T> responseType, Object... urlVariables) {
    return this.restTemplate.getForEntity(url, responseType, urlVariables);
}

第一个参数url为要调用的服务的地址;传递参数时可以用下例中name={name}的方法,或者直接写出具体参数值;
第二个参数responseType表示希望返回的body类型,一般为类名.class形式(可以是自定义的类);
示例:

@GetMapping("/getForEntity")
public ResponseEntity<String> getForEntity() {
    ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:8080/getForEntity?name={name}", String.class);
    //ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:8080/getForEntity?id=123456", String.class);
    System.out.println("statusCode:" + response.getStatusCode());
    System.out.println("Body:" + response.getBody());
	return response;
}

getForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。

1.2getForObject

getForObject函数是对getForEntity函数的进一步封装,如果只关注返回的消息体的内容,对其他信息都不关注,此时可以使用getForObject;

public <T> T getForObject(String url, Class<T> responseType, Object... urlVariables) {
    return this.restTemplate.getForObject(url, responseType, urlVariables);
}

2.POST类型

2.1postForEntity

public <T> ResponseEntity<T> postForEntity(String url, Object request, Class<T> responseType, Object... urlVariables) {
    return this.restTemplate.postForEntity(url, request, responseType, urlVariables);
}

第一个参数url为要调用的服务的地址;
第二个参数为请求体,传参位置;(也是体现了get和post请求传参时的一个差别所在)
第二个参数responseType表示希望返回的body类型,一般为类名.class形式(可以是自定义的类);
示例:

@PostMapping("/postForEntity")
public ResponseEntity<String> postForEntity() {
	User user=new User();
    user.setSex("女");
    ResponseEntity<String> response = restTemplate.postForEntity("http://localhost:8080/postForEntity",user,String.class);
    System.out.println("statusCode:" + response.getStatusCode());
    System.out.println("Body:" + response.getBody());
	return response;
}

postForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。

2.2postForObject

postForObject函数是对postForEntity函数的进一步封装,如果只关注返回的消息体的内容,对其他信息都不关注,此时可以使用postForObject;文章来源地址https://www.toymoban.com/news/detail-456573.html

public <T> T postForObject(String url, Object request, Class<T> responseType, Object... urlVariables) {
    return this.restTemplate.postForObject(url, request, responseType, urlVariables);
}

到了这里,关于后端学习2.1:引入Junit,对接口做单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对接微信支付接口

    https://pay.weixin.qq.com/wiki/doc/api/index.html 1.准备工作: 在微信上申请服务号类型的公众号,从公众号获取以下数据 appid:微信公众账号或开放平台APP的唯一标识 mch_id:商户号 (配置文件中的partner) partnerkey:商户密钥 2. 根据项目需求选择适合的支付方式,本例使用Native支付方式

    2024年02月13日
    浏览(55)
  • 电商API接口对接电子商务平台实现电商供应链一键对接

    按照商家的技术能力,可以为商家提供多种对接方案: 通过平台提供的API接口对ERP系统进行开发,实现和平台的对接,适用于有专业技术开发能力的商家; 平台统一开发服务系统,由平台人员实施商家ERP与平台的对接,适用于无专业的技术对接能力,有ERP系统且大批量信息

    2024年02月06日
    浏览(59)
  • Springboot 接口对接文件及对象

    两个sprongboot项目实现文件对接,在传入文件同时传递其他对象信息,比如接口如下 例如在D盘下创建1.txt,里边写入内容 界面输入传送方项目路径,比如:http://localhost:8082/send/sendFile 界面返回信息     接收方控制台输出

    2024年02月12日
    浏览(42)
  • 棋牌可对接的三方支付接口

    首先我们对第三方支付进行一个了解 所谓第三方支付 就是一些和产品所在国家以及国外各大银行签约 并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台 在通过第三方支付平台的交易中 买方选购商品后,使用第三方平台提供的账户进行货款支付 由第三方通知

    2024年02月04日
    浏览(63)
  • Midjourney API 接口对接历程

    Midjourney是一个基于Discord环境的画图工具,它提供API接口用于扩展功能。对于程序开发者来说,Midjourney只能在Discord环境下使用,这限制了它的使用范围。本文将介绍使用Midjourney的API接口进行开发发过程中遇到的一些问题。 内测地址:由于不符合1万张门槛,登录被拒绝 无法

    2024年02月11日
    浏览(47)
  • Postman创建项目 对接口发起请求处理

    查看本文之前 您需要理解了解 Postman 的几个简单工作区 如果还没有掌握 可以先查看我的文章 简单认识 Postman界面操作 那么 掌握之后 我们就可以正式来开启我们的接口测试 我们先选择 Collections 我们点上面这个加号 多拉一个项目出来 然后 我们选我们刚加号点出来的项目 点

    2024年02月08日
    浏览(49)
  • MySQL和钉钉单据接口对接

    钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台深度整合,打造简单、高效、安全、智能的数字化未来工作方式

    2024年02月13日
    浏览(45)
  • 对接支付宝单笔转账接口

    转账到支付宝账户是为了满足支付宝商家向其他支付宝账户进行单笔转账的需求,针对具备开发能力的商家,提供通过 API 接口完成单笔转账的功能。可在支付宝 商家中心 产品中心 中开通 转账到支付宝账户 能力,在支付宝 商家中心 资金管理 中提交开通免费提额申请。 计

    2024年02月07日
    浏览(45)
  • 关于Vue前端接口对接的思考

    Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 需求: 1.vue 组件分类和获取数值的方式 在Vue中,组件可以分为以下几种类型: 全局组件(Global Components):全局组件是在

    2024年01月23日
    浏览(45)
  • 钉钉和MySQL接口打通对接实战

    钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,提供PC版,Web版和手机版,有考勤打卡、签到、审批、日志、公告、钉盘、钉邮等强大功能。 mysql是一个关系数据库管理系统(RDBMS),所谓的关系型数据库,是建立在关系模型基础上的数据库,

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包