依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
</dependencies>
接口
public interface AddressService {
String getAddress(Long id);
}
public interface StudentService {
String getAge(Long id);
}
@Service
public class AddressServiceImpl implements AddressService {
@Override
public String getAddress(Long id) {
return "河南省";
}
}
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private AddressService addressService;
@Override
public String getAge(Long id) {
return id + addressService.getAddress(id) + ConfigUtil.getPath();
}
}
静态类
public class ConfigUtil {
public static String getPath() {
return "path";
}
}
单元测试
方法一:
@ContextConfiguration(locations = {"classpath:applicationContext-mock.xml"})
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@PrepareForTest({ConfigUtil.class})
public class StudentServiceTest1 {
@Autowired
private StudentService studentService;
@Test
public void test() {
MockitoAnnotations.initMocks(this);
AddressService addressService = PowerMockito.mock(AddressService.class);
ReflectionTestUtils.setField(studentService, "addressService", addressService);
PowerMockito.when(addressService.getAddress(1L)).thenReturn("mock");
// 模拟静态方法
PowerMockito.mockStatic(ConfigUtil.class);
PowerMockito.when(ConfigUtil.getPath()).thenReturn("staticMock");
String result = studentService.getAge(1L);
System.out.println(result);
}
}
// 输出:1mockstaticMock
方法二
@ContextConfiguration(locations = {"classpath:applicationContext-mock.xml"})
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@PrepareForTest({ConfigUtil.class})
public class StudentServiceTest2 {
@Autowired
private StudentService studentService;
@Mock
private AddressService addressService;
@Test
public void test() {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(studentService, "addressService", addressService);
Mockito.when(addressService.getAddress(1L)).thenReturn("mock");
// 模拟静态方法
PowerMockito.mockStatic(ConfigUtil.class);
PowerMockito.when(ConfigUtil.getPath()).thenReturn("staticMock");
String result = studentService.getAge(1L);
System.out.println(result);
}
}
// 输出:1mockstaticMock