单元测试系列三-基于Springboot+Junit+Mockito做单元测试

本文介绍了如何使用Springboot、Junit和Mockito进行单元测试,通过案例展示如何隔离外部依赖,控制@Autowired注解依赖的返回值以及部分Mock内部方法。文章强调了理解需求和单元测试粒度的重要性,提供了测试框架的Maven依赖和上下文构建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前面的两篇文章讨论过《为什么要写单元测试,何时写,写多细》和《单元测试规范》,这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取撮合交易的一个类来做单元测试。

单元测试前先理解需求

要写出好的单测,必须先理解了需求,只有知道做什么才能知道怎么测。但本文主要讲mockito的用法,无需关注具体需求。所以本节略去具体的需求描述。

隔离外部依赖

Case1. 被测类中被@Autowired 或 @Resource 注解标注的依赖对象,如何控制其返回值

以被测方法 MatchingServiceImpl.java的matching(MatchingOrder buyOrder, MatchingOrder sellOrder)为例

  • 被测类MatchingServiceImpl
public class MatchingServiceImpl implements MatchingService {
   
   
    private static final Logger log = LoggerFactory.getLogger(MatchingServiceImpl.class);
    @Autowired
    private QuoteService quoteService;
    ...
    public MatchingResult matching(MatchingOrder buyOrder, MatchingOrder sellOrder) {
        int currentPrice = quoteService.getCurrentPriceByProduct(buyOrder.getProductCode());
        MatchingResult result = new MatchingResult();
        if (sellOrder != null && buyOrder != null &&
                sellOrder.getPrice() <=  buyOrder.getPrice()) {
        ...
    }
}

matching方法中的quoteService.getCurrentPriceByProduct(buyOrder.getProductCode());要访问Redis获取当前报价,这里我们需要把外部依赖quoteService mock掉,控制getCurrentPriceByProduct方法的返回值。使用mockito可以做到,具体如下:

  • 测试类MatchingServiceImplTest
public class MatchingServiceImplTest extends MockitoBasedTest {
   
   
    /**
     * 被@Mock标注的对象会自动注入到被@InjectMocks标注的对象中
     */
    @Mock
    private QuoteService quoteService;
    /**
     * <pre>
     * 被测对象,用@InjectMocks标注,那些被@mock标注的对象就会自动注入其中。
     * 另一个注意点是这里的MatchingS
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值