使用Powermock和mockito测试静态方法

1. 加入依赖包(maven)

 

<dependency>
	<groupId>org.powermock</groupId>
	<artifactId>powermock-api-mockito</artifactId>
	<version>1.4.10</version>
	<scope>test</scope>
</dependency>

<dependency>
	<groupId>org.powermock</groupId>
	<artifactId>powermock-module-junit4</artifactId>
	<version>1.4.10</version>
	<scope>test</scope>
</dependency>

 

2. example

 

class MyStringUtil {

	public static String uppercase(String s) {
		return s.toUpperCase();
	}
}

@RunWith(PowerMockRunner.class) // 1
@PrepareForTest({ MyStringUtil.class }) // 2
public class HelloTest {

	@Before
	public void before() {
		PowerMockito.mockStatic(MyStringUtil.class); // 3
	}

	@Test
	public void test() throws IOException {
		PowerMockito.when(MyStringUtil.uppercase("abc")).thenReturn("ABC"); // 4
		assertEquals("ABC", MyStringUtil.uppercase("abc")); // 5
	}
}

 

 

① 标注使用PowerRunner运行test(powermock会修改字节码)

② 设置mock类(支持多个类,逗号分隔),这个可以设置到class上,也可以设置到method上。这里面包含两种类型: 

  1. 被mock的类(如上例MyStringUtil .class,如果mock类为系统类,如System.class,则不需要这里设置就可以使用)
  2. context类,如果是在XxxServer里面希望mock MyStringUtil类,则要设置 XxxServer.class

③ 告诉powermock需要mock哪个类。(感觉这里配置和②有点重合)

④ 打桩,设置mock对象返回预期值。(测试mock方法还未执行)

⑤ 执行mock方法,返回预期值。

 

-- heipark

 

 

 

你可能感兴趣的:(使用Powermock和mockito测试静态方法)