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

相关文章
|
17天前
|
前端开发 Java 应用服务中间件
SpringBoot-Run启动流程
探索Spring Boot启动流程,从加载配置、创建应用上下文、自动配置到启动内嵌服务器。启动类是入口点,`@SpringBootApplication`标记启动,`SpringApplication.run`启动应用。自动配置基于条件注解配置Bean,应用上下文由`SpringApplication`创建并刷新。内嵌服务器如Tomcat随应用启动,简化部署。理解此流程有助于深入掌握Spring Boot。
161 2
|
1月前
|
弹性计算 监控 测试技术
弹性计算的测试流程
弹性计算的测试流程
18 0
|
2月前
|
缓存 Java 程序员
springboot的启动流程总结
springboot的启动流程总结
|
2月前
|
设计模式 Java 容器
SpringBoot2 | SpringBoot启动流程源码分析(二)
SpringBoot2 | SpringBoot启动流程源码分析(二)
44 0
|
2月前
|
安全 测试技术 持续交付
接口自动化测试的基本流程
接口自动化测试的基本流程
|
3月前
|
存储 测试技术 持续交付
自动化测试与持续集成/持续交付(CI/CD):优化软件开发流程的利器
自动化测试与持续集成/持续交付(CI/CD)是现代软件开发中至关重要的环节,通过将自动化测试与持续集成/持续交付相结合,可以实现开发流程的高效优化,提高软件质量和交付速度。本文将探讨自动化测试与CI/CD的概念、原理及其在软件开发中的重要性,以及如何实施这些技术以提升团队的协作效率和软件交付质量。
58 1
|
17天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
21 0
|
1月前
|
Java 测试技术 数据库
springboot大学生体质测试管理系统
springboot大学生体质测试管理系统
|
2月前
|
Java 测试技术 编译器
JMM测试利器-JCStress学习笔记
JMM测试利器-JCStress学习笔记
|
2月前
|
运维 Java 测试技术
spring 单元测试 Junit
spring 单元测试 Junit
43 2

热门文章

最新文章