开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段):支付业务服务端测试】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/703/detail/12440
支付业务服务端测试
Pay-service测试
对 Pay-service 测试,测试之前由于 shop-api 添加了接口的方法,需要将工程安装,如果对 shop-common 进行修改,shop-common 同样需要安装
安装完成后需要编写一个测试方法
Name为com.itheima.test.PayServiceTest
@Runwith(SpringRunner.class)
@springBootTest(classes = PayserviceApplication.class)
public class PayServiceTest
{
//注入
PayService
@Autowired
private IPayservice payService;
//测试createPayment()方法测试时用接口调用,传递treadePay 对象,对象是请求服务端时的分装参数
@Test
public void
createPayment(){
TradePay treadePay = new TradePay();
tradePay.setOrderId()请求是支付处理,对支付订单做处理
打开订单表,使用已确认的订单测试
之前生成的订单数据
使用已确认的订单,状态值为1的数据测试
添加long orderId = 351526299216515072L;
@Test
public void createPayment(){
long orderId = 351526299216515072L;
TradePay tradePay = new TradePay();
tradePay.setorderIdo(orderId);
payservice.createPayment(tradePay);
Ispaid 不能设置,通过服务端处理,需要指定当前金额
支付金额880元,订单总金额1000元,减去优惠券20元,余额100元,最终留下880元,需要支付880元,进行Payservice调用
@Test
public void createPayment(){
long orderId = 351526299216515072L;
TradePay tradePay = new TradePay();
tradePay.setorderIdo(orderId);
tradePay.setPayAmount(new BigDecimal(val:880))
payservice.createPayment(tradePay);
执行,微服务不需要启动,因为测试方法运行时会加载启动入口类,直接运行即可
查看支付订单能否生成
查看测试台执行结果,测试通过,生成支付订单
测试支付回调
对 callbackPayment 进行测试
调用此方法需要传递当前支付订单 ID 参数
将 ID 号传递过来,将订单 ID 传递过来,将 PayId 与关联的订单 ID 设置
@Test
public void callbackPayment(){
long payId =“352516176372441088L
long orderId = 351526299216515072L;
TradePay tradePay = new TradePay();
tradePay.setPayId(payId)
tradePay.setorderIdo(orderId);
tradePay.setIsPaid(ShopCode.SHOP_ORDER_PAY_STATUS_IS_PAY.getcode());
payservice.callbackeayment(tradePay);
}
回调方法调用,被第三方支付平台调用,在用户支付完成后被调用,传递支付状态,是一个支付成功状态,SHOP_ORDER_PAY_STATUS_IS_PAY.getcode()
测试首先调用 service.impl,不需要重启,只要进行回调发送消息,消息最终被 order-service 微服务处理,order-service 启动,相关联的 coupon-service/goods-service/user-service 都需要启动,coupon-service/goods-service/user-service 三个依次进行微服务启动
观察控制台,都已经成功启动,
启动完成后,针对订单进行支付
支付完成后,第三方支付平台进行回调
模拟第三方支付平台回调
删除断点,执行
执行成功,未消费消息,tradePay 状态未改变
加一个断点
是否执行
is_paid 还原成0,重新测试
sendMessage 调用
数据都存在,发送,发送完成后结果未返回
sendResult 执行未收到消息,表明消息未发送成功
发送消息的方法在线程池中调用,线程池中调用相当于创建一个子线程,通过异步的方式发送消息,子线程相当于主线程的守护线程,测试方法在主线程中运行,测试方法执行完成后,主线程停止子线程也停止,由于消息发送是异步的,主线程停止,消息还未发送线程停止,消息无法发送
需要测试方法不停止,让子线程有足够的时间发送消息
将 is_paid 改为0,重新设置
pay_status 状态未变
重新执行
加入两个断点
发送,发送成功,放行
测试方法未停止,线程池中有足够的时间发送消息
消息发送后,消息成功接收
接收到支付成功消息,更改订单支付状态为已支付
刷新,订单状态变为2
Pay-service 测试实现