1、准备环境
引入PowerMock包,版本号一定要对应,不然可能会因为版本不兼容报错。
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mock -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
2、一个简单的测试示例
import com.cjh.srx.service.ReadsmsService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
@RunWith(PowerMockRunner.class)
public class DemoTest {
@InjectMocks
private ReadsmsService readsmsService;
@Mock
private ReadsmsMapper readsmsMapper;
@Before
public void setUp(){
// 通过Whitebox给被测的类中的私有属性赋值 appId和12345分别是属性名和属性值
Whitebox.setInternalState(readsmsService,"appId","12345");
}
@Test
public void addSmsInfo(){
//自定义被测方法的参数
SmsInfo smsInfo = new SmsInfo();
smsInfo.setId("123");
smsInfo.setContent("内容");
// 模拟入库方法的返回值为1
try {
PowerMockito.doReturn(1).when(readsmsMapper).insertSmsInfo(smsInfo);
} catch (Exception e) {
e.printStackTrace();
}
// 自定义预计结果
SmsResponse expext = SmsResponse.success();
// 调用实际方法返回的实际结果
SmsResponse actual = readsmsService.addSmsInfo(smsInfo);
// 通过assert方法自动校验
Assert.assertEquals("返回值不相等",expext,actual);
}
}