我们开发中经常要编写单元测试来保证代码逻辑的正确性,但是使用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使用了, 单元测试是保证代码正确性的重要部分,可是经常被忽视, 后面也要更加注意写出可测试的代码,配合单元测试来保证代码的正确性