我们开发中经常要编写单元测试来保证代码逻辑的正确性,但是使用spring开发时有时候我们并不想把整个spring容器跑起来。
有了mockito我们就可以方便的对一些依赖项进行mock,这样我们只需要验证需要测试的一小部分代码逻辑,测试类也会跑的很快
接下来就让我们一起来看下如何使用吧
我这里是Springboot项目
加入依赖
testImplementation 'org.springframework.boot:spring-boot-starter-test'
Service 类
public interface AddService { long add(long a, long b); } @Service public class AddServiceImpl implements AddService { private CalculatorService calculatorService; public AddServiceImpl(CalculatorService calculatorService) { this.calculatorService = calculatorService; } @Override public long add(long a, long b) { return calculatorService._add(a,b); } }
AddServiceImpl 中包含依赖项 CalculatorService
@Service public class CalculatorService { long _add(long ...args){ long sum = 0; for (long arg : args) { sum = sum + arg; } return sum; } }
这里我们要对AddServiceImpl 的add方法进行测试,我们需要Mock依赖项CalculatorService 来保证仅测试AddServiceImpl的逻辑
package com.xms.jc.xmstools; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; // 支持Mockito相关注解 @RunWith(MockitoJUnitRunner.class) public class MockitoTest { @Mock CalculatorService calculatorService; @InjectMocks // @InjectMocks 可以帮我们注入AddServiceImpl 需要的依赖 CalculatorService AddServiceImpl addService; @Test public void testAdd() { // 对Mock出来的对象方法调用给一个预期行为 when(calculatorService._add(1, 1)).thenReturn(3l); // 断言单元测试结果 assertEquals(3, addService.add(1, 1)); } }
这就是基本的Mocoito使用了, 单元测试是保证代码正确性的重要部分,可是经常被忽视, 后面也要更加注意写出可测试的代码,配合单元测试来保证代码的正确性