Java测试框架系列:PowerMock使用系列

您所在的位置:网站首页 mock系统 Java测试框架系列:PowerMock使用系列

Java测试框架系列:PowerMock使用系列

2024-03-31 03:19| 来源: 网络整理| 查看: 265

Mock系统类

注意:尽管此处显示的所有示例都是使用EasyMock API扩展制作的,但相同的技术也适用于Mocktio API扩展。

总览 在类上使用 @RunWith(PowerMockRunner.class) 注解。 在类上使用 @PrepareForTest({ClassThatCallsTheSystemClass.class}) 注解。 使用 mockStatic(SystemClass.class) 去Mock系统类,然后设置正常的期望值。 仅EasyMock可用: 使用 PowerMock.replayAll() 切换到replay模式。 仅EasyMock可用: 使用 PowerMock.verifyAll() 切换到verify模式。 示例

PowerMock 1.2.5及更高版本支持Mock Java系统类(例如位于java.lang和java.net等中的类)中的方法。此方法无需修改JVM或IDE设置即可!模拟这些类的方式与平常有些不同。通常,您将准备包含要模拟的静态方法的类(我们称其为X),但是因为PowerMock无法准备要测试的系统类,所以必须采用另一种方法。因此,不用准备X,而是准备调用X中静态方法的类!让我们看一个简单的例子:

public class SystemClassUser { public String performEncode() throws UnsupportedEncodingException { return URLEncoder.encode("string", "enc"); } }

在这里,我们要模拟通常无法进行的静态方法调用的java.net.URLEncoder#encode(..)方法。由于URLEncoder类是系统类,因此我们应该准备SystemClassUser进行测试,因为它是调用URLEncoder中encode方法的类。例如:

@RunWith(PowerMockRunner.class) @PrepareForTest({SystemClassUser.class}) public class SystemClassUserTest { @Test public void assertThatMockingOfNonFinalSystemClassesWorks() throws Exception { mockStatic(URLEncoder.class); expect(URLEncoder.encode("string", "enc")).andReturn("something"); replayAll(); assertEquals("something", new SystemClassUser().performEncode()); verifyAll(); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3