SpringBoot 集成 JUNIT 测试下单基本流程|学习笔记

简介: 快速学习 SpringBoot 集成 JUNIT 测试下单基本流程

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)SpringBoot 集成 JUNIT 测试下单基本流程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12423


SpringBoot 集成 JUNIT 测试下单基本流程


1、@override

publicResultconfirmorder(Tradeorderorder){

//1.校验订单是否合法

checkorder(order);

//2.生成预订单,在数据库中保存一个对用户不可见的订单数据

LongorderId=savePreorder(order);

order.setorderId(orderId);

try{

//3.扣减库存,调用商品的微服务进行库存的扣减

reduceGoodsNum(order);

//4.扣减优惠券,调用优惠卷的微服务

changeCoponstatus(order);

//5.使用余额,用户在数据库中的余额减订单中要使用的余额

reduceMoneyPaid(order);

//6.确认订单,将生成预订单的状态设置为可见即可

updateorderstatus(order);

log.info("订单:["+orderId+"]确认成功");

returnnewResult(ShopCode.SHOP_SUCCESS.getsuccess(),

shopCode.SHOP_SUCCESS.getMessage());

}catch(Exceptione){

//确认订单失败,发送消息

returnnewResult(ShopCode.SHOP_FAIL.getsuccess(,

ShopCode.SHOP_FAIL.getMessage());

}

}

2、测试,首先要把每一个微服务启动起来,包含优惠卷微服务,商品微服务,用户微服务。

image.png

(1)点击 shop-coupon-service,

创建入口令 CouponApplication。

image.png

packagecom.itheima.shop;

Import

com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

importorg.springframework.boot.SpringApplication;

import

org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubboConfiguration

publicclassCouponApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(CouponApplication.class,args)

}

}

(2)点击 shop-goods-service,创建入口令 GoodsApplication。

image.png

packagecom.itheima.shop;

import

com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

importorg.springframework.boot.SpringApplication;

importorg.springfr

amework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubboConfiguration

publicclassGoodsApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(GoodsApplication.class,args);

}

}

(3)点击 shop-order-service,创建入口令 OrderApplication。

image.png

packagecom.itheima.shop;

import

com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

importorg.springframework.boot.SpringApplication;

import

org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubboConfiguration

publicclassOrderApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(OrderApplication.class,args);

}

}

(4)点击  shop-user-service,创建入口令 UserApplication。

image.png

packagecom.itheima.shop;

import

com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

importorg.springframework.boot.SpringApplication;

import

org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubboConfiguration

publicclassUserApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(UserApplication.class,args);

}

}

3、打开虚拟机 zookeeper,启动微服务,环境准备好,使用编写的入口令启动,但是在启动前要注意couponservicelmpl 中注入了 tradecouponmapper,mapper 接口,mapper 注入进来,上面要有@mapper 注解。报错不是编译的问题,是工具在当前要找到接口的事项类,但是运行时才会进行注入。

启动,可以看到 double 的 logo。

image.png

查看是否有错误的信息,在192.168.25.140:8080/dubbo-admin/图

形化界面,可以看服务是否注册到注册中心

image.png

可以看到启动了一个微服务。

image.png

4、按照同样的方式启动 shop-goods-service,先不要启动 shop-order-service,它要依赖 shop-user-service,所以先启动 UserApplication,刷新可以看到。

image.png

5、启动 shop-order-service,其中先检查 service 中的服务是否存在,不要忘记添加 idworker,使用 spring 注解的方式 bean 的实例化,returnidworker 的对象,指定数据中心的id以及机器的 id。

@Bean

publicIDWorkergetBean(){

returnnewIDWorker(datacenterld:1,machineld:1);

}

做好准备工作,启动orderapplication,查看是否启动成功,服务都被启动成功。

image.png

6、优化,如果有外部层,名字不好起,所以入口令名字中间都加 Service,CouponServiceApplication,好区分是外部层还是服务层,先启动 UserSericeApplication,再启动 OrderServiceApplication,GoodsServiceApplication

,刷新,再启动 OrderServiceApplication。

image.png

7、在 shop-order-service 编写单元测试,使用单元测试方法进行测试,四个微服务都被启动,接下来编写单元测试类,在 shop-order-service-src-test-java 中创建包 com.itheima.test。

image.png

创建测试类 OrderServiceTest。

image.png

packagecom.itheima.test;

importcom.itheima.shop.OrderServiceApplication;

importorg.junit.runner.RunWith;

import

org.springframework.boot.test.context.SpringBootTest;

import

org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)

//如果之前没用springboot进行测试,需要指定当前核心配置文件,但是现在 springboot 集成 JUNIT,所以只需要指定入口类的 class

即可

@SpringBootTest(classes=OrderServiceApplication.class)

publicclassOrderServiceTest{

//注入

@Autowired

privateIOrderServiceorderService;

//注解

@Test

publicvoidconfirmOrder(){

LongcoupouId=345988230098857984L;

LonggoodsId=345959443973935104L;

LonguserId=345963634385633280L;

image.png

TradeOrderorder=newTradeOrder();

//商品id

order.setGoodsId(goodsid);

//用户id

order.setUserId(userid);

//优惠卷

order.setCouponId(coupouid);

//收货地址

order.setAddress("北京");

//买一套

order.setGoodsNumber(1);

//订单确认是商品被加入到购物车,将购物车数据进行保存,让前台

提交商品的单价,方便后台的比对

order.setGoodsPrice(newBigDecimal(val:1000));

//前台提交运费,运费是0

order.setShippingFee(BigDecimal.ZERO);

//商品总的价格加快递的费用

order.setOrderAmount(newBigDecimal(val:1000));

image.png

//使用余额

order.setMoneyPaid(newBigDecimal(val:100));

//调用方法,确认订单

orderService.confirmOrder(order);

}

}

8、查看测试结果,测试出现异常,20884端口被占用,spring.dubbo.protocol.port=20884以测试的方法去运行时会自动启动 OrderServiceApplication.class 微服务,微服务在之前已经启动过,单元测试还要加载入口令,启动微服务,所以就会报错,把 OrderServiceApplication 关掉,通过单元测试的方式进行启动,用户的余额是1000,优惠卷是20,商品数量是1000,测试。出现异常,日期有问题,改成2020-10-10,保存。

image.png

用户表中的日期是非法的日期,所以导致出现问题,查看其他数据是否受到影响,重新测试,执行成功,没有出现问题,检查数据库中订单是否生成,可以看到有订单生成,订单总金额是1000,减优惠卷20,减余额100,支付金额880。优惠卷已经使用。

image.png

记录减库存日志。

image.png

用户余额900。

image.png

操作记录。

image.png

相关文章
|
2天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
4天前
|
Devops jenkins 测试技术
DevOps实践:持续集成与自动化测试的融合之道
【9月更文挑战第29天】在软件开发的快节奏竞赛中,DevOps如同一位智慧的舵手,引领着船只驶向效率与质量的彼岸。本文将揭开DevOps的神秘面纱,探索其核心理念如何通过持续集成(CI)和自动化测试的实践,实现软件开发流程的优化与加速。我们将一同见证代码从构思到部署的旅程,以及这一过程中的关键技术和工具如何协同工作,确保软件质量和交付速度的双重提升。
|
18天前
|
Ubuntu jenkins 测试技术
软件测试中的自动化与持续集成实践
【9月更文挑战第15天】在软件开发的快节奏世界中,自动化测试和持续集成(CI)已成为确保质量和效率的关键策略。本文旨在揭示如何通过实施自动化测试框架和CI流程来优化开发周期,减少人为错误,并加快产品上市时间。我们将探讨一些实用的工具和技术,以及它们如何帮助团队实现更流畅、更可靠的软件发布。
|
18天前
|
敏捷开发 jenkins Devops
软件测试的新篇章:自动化与持续集成的融合
【9月更文挑战第15天】在软件开发领域,质量保障始终是核心议题。随着敏捷开发的普及和DevOps文化的兴起,自动化测试和持续集成(CI)已成为现代软件工程不可或缺的组成部分。本文将深入探讨自动化测试的重要性、实施策略以及如何将其无缝集成到CI流程中,以实现更高效、更稳定的软件开发周期。通过具体案例分析,我们将揭示自动化测试和CI如何相互促进,提升软件交付的速度和质量。
|
21天前
|
监控 安全 测试技术
提升软件测试效率:探索持续集成的最佳实践
在现代软件开发过程中,持续集成(CI)已成为提高软件质量和测试效率的关键实践。通过将代码库的每次提交自动构建和测试,CI 帮助团队及时发现问题,减少手动测试的负担。本文探讨了如何有效实施持续集成来优化软件测试流程,并提供了一些实用的策略和工具建议,以帮助开发团队更高效地运作。
43 2
|
21天前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
11 0
Spring Boot+cucumber+契约测试
|
2月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
39 8
|
2月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
2月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
2月前
|
Java 测试技术
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
SpringBoot单元测试快速写法问题之区分链路环节是否应该被Mock如何解决
下一篇
无影云桌面