来源:太原达内IT教育学校
时间:2021/5/6 16:18:42
太原达内线上Java课程,小编在这里为大家推荐太原达内IT培训,17年专业IT培训机构,美国上市集团,开设IT培训班Java、python、大数据、linux、UI、会计等IT培训,覆盖IT培训和非IT培训共24大课程。达内集团凭借雄厚的技术研发实力、过硬的教学质量、成熟的就业服务团队,为学员提供强大的职业竞争力,在用人企业中树立了良好的口碑。欢迎大家的在线咨询,0元试听,随到随学,推荐就业。接下来小编为您分享,Java单元测试技巧之PowerMock
调用真实方法
public class ListTest {
@Test
public void testGet() {
int index = 0;
Integer expected = 100;
List<Integer> oldList = new ArrayList<>();
oldList.add(expected);
List<Integer> spylist = PowerMockito.spy(oldList);
PowerMockito.doCallRealMethod().when(spylist).get(index);
Integer actual = spylist.get(index);
Assert.assertEquals("返回值不相等", expected, actual);
}
}
3 两种模式的主要区别
两种模式都用于模拟对象方法,在mock实例下使用时,基本上是没有差别的。但是,在spy实例下使用时,when().thenReturn()模式会执行原方法,而doReturn().when()模式不会执行原方法。
测试服务类
@Slf4j
@Service
public class UserService {
public long getUserCount() {
log.info("调用获取用户数量方法");
return 0L;
}
}
使用when().thenReturn()模式
@RunWith(PowerMockRunner.class)
public class UserServiceTest {
@Test
public void testGetUserCount() {
Long expected = 1000L;
UserService userService = PowerMockito.spy(new UserService());
PowerMockito.when(userService.getUserCount()).thenReturn(expected);
Long actual = userService.getUserCount();
Assert.assertEquals("返回值不相等", expected, actual);
}
}
在测试过程中,将会打印出"调用获取用户数量方法"日志。
使用doReturn().when()模式
@RunWith(PowerMockRunner.class)
public class UserServiceTest {
@Test
public void testGetUserCount() {
Long expected = 1000L;
UserService userService = PowerMockito.spy(new UserService());
PowerMockito.doReturn(expected).when(userService).getUserCount();
Long actual = userService.getUserCount();
Assert.assertEquals("返回值不相等", expected, actual);
}
}
在测试过程中,不会打印出"调用获取用户数量方法"日志。
4 whenNew模拟构造方法
声明:
PowerMockito.whenNew(MockClass.class).withNoArguments().thenReturn(expectedObject);
PowerMockito.whenNew(MockClass.class).withArguments(someArgs).thenReturn(expectedObject);
用途:用于模拟构造方法。
案例:
public final class FileUtils {
public static boolean isFile(String fileName) {
return new File(fileName).isFile();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({FileUtils.class})
public class FileUtilsTest {
@Test
public void testIsFile() throws Exception {
String fileName = "test.txt";
File file = PowerMockito.mock(File.class);
PowerMockito.whenNew(File.class).withArguments(fileName).thenReturn(file);
PowerMockito.when(file.isFile()).thenReturn(true);
Assert.assertTrue("返回值为假", FileUtils.isFile(fileName));
}
}
注意:需要加上注解@PrepareForTest({FileUtils.class}),否则模拟方法不生效。
五 参数匹配器
在执行单元测试时,有时候并不关心传入的参数的值,可以使用参数匹配器。
1 参数匹配器(any)
Mockito提供Mockito.anyInt()、Mockito.anyString、Mockito.any(Class<T> clazz)等来表示任意值。
public class ListTest {
@Test
public void testGet() {
int index = 1;
Integer expected = 100;
List<Integer> mockList = PowerMockito.mock(List.class);
PowerMockito.when(mockList.get(Mockito.anyInt())).thenReturn(expected);
Integer actual = mockList.get(index);
Assert.assertEquals("返回值不相等", expected, actual);
}
}
温馨提示:为了不影响您的时间,来校区前或者遇到不明白的问题请先电话咨询,方便我校安排相关课程的专业老师为您解答,选取适合您的课程。以上是太原达内教育的小编为您分享的关于Java单元测试技巧之PowerMock的内容,希望可以为同学们提供帮助,更多Java资讯请持续关注太原达内教育。
版权所有:搜学搜课(www.soxsok.com)