PowerMock比Mockito强大,能模拟static,private和final的方法,还能模拟构造方法。
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ MyClass.class})
public class StaticClassSampleTest {
@Test
public void testPrivateMethod() throws Exception {
// 模拟 private的方法
MyClass spy = PowerMockito.spy(new MyClass());
PowerMockito.doReturn(3).when(spy, "private_method", 1);
Assert.assertEquals(3, spy.test_private_method(1));
PowerMockito.verifyPrivate(spy, Mockito.times(1)).invoke("private_method", 1);
}
@Test
public void testStaticReturnMethod() throws Exception {
// 模拟 静态有返回值的方法
PowerMockito.mockStatic(MyClass.class);
Mockito.when(MyClass.static_return_method()).thenReturn(2);
Assert.assertEquals(2, MyClass.static_return_method());
}
@Test
public void testVoidMethod() throws Exception {
// 模拟 不执行void的方法
MyClass spy = PowerMockito.spy(new MyClass());
PowerMockito.doNothing().when(spy).void_method();
spy.void_method();
}
@Test
public void testStaticMethod1() throws Exception {
// 模拟 不执行没参数的静态void的方法
PowerMockito.mockStatic(MyClass.class);
PowerMockito.doNothing().when(MyClass.class, "static_void_method");
MyClass.static_void_method();
}
@Test
public void testStaticMethod2() throws Exception {
// 模拟 不执行带参数的静态void的方法
PowerMockito.mockStatic(MyClass.class);
PowerMockito.doNothing().when(MyClass.class, "staticMethod", "123");
MyClass.staticMethod("123");
PowerMockito.doNothing().when(MyClass.class, "staticMethod", Mockito.anyString());
MyClass.staticMethod("456");
}
}
class MyClass {
final private int private_method(int a) {
return a;
}
public int test_private_method(int a) {
return private_method(a);
}
public static int static_return_method() {
return 1;
}
void void_method() {
throw new IllegalStateException("should not go here");
}
public static void static_void_method() {
throw new IllegalStateException("should not go here");
}
public static void staticMethod(String a) {
throw new IllegalStateException(a);
}
}
附上maven依赖
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.10</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.4.10</version>
</dependency>
分享到:
相关推荐
通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。因为 PowerMock 在扩展功能时完全采用和被...
PowerMock的核心功能在于其能够通过提供定制的类加载器和应用一些字节码操作技巧,实现对静态方法、构造方法、私有方法和final方法的模拟。例如,在进行单元测试时,有时候我们并不希望测试数据进入实际的数据库,...
该应用程序具有定制的确认机制和完整性检查算法,以确保通过 UDP 的可靠数据传输和数据安全。 客户端请求服务器上可用文件之一的内容。 服务器响应内容(如果存在)或发送适当的错误消息。执行应用程序: 您将需要...
使用MRUnit来编写HadoopMapReduce应用程序的JUnit测试2.使用PowerMock和Mockito模拟静态方法3.模拟其他类型中的业务逻辑(译注:也就是编写测试驱动模块)4.查看模拟的业务逻辑是否被调用(译注:测试驱动模块是否...
《Android测试开发--基于Java编程语言技术体系》 基于Java编程语言,帮你...PowerMock框架 Android环境搭建 Android SDK Android Studio Android项目介绍 构建简单的用户界面 启动另一个 Activity Android测试支持库
Bikeshed应用这只是有关如何构建已分离的Android应用程序的想法的集合。 在我对该仓库进行迭代时,目标是保持构建一切快速,增量,并行,...可测要进行测试需要没有静态单例,因为这将要求PowerMock进行正确的测试。
则可以从Web层正确测试应用程序的安全性用法: 测试代码示例: @Testpublic void test_different_values() {// Must do: Initialize type of testDoPostTest testObj = new DoPostTest ();ExampleServlet
电影评论 “电影评论”应用程序的创建面临着尝试模拟后端和前端功能的挑战 检查Wiki以获取更多信息: : 工作示例: :
用于期权定价方案分析的Web应用程序。 技术栈: 后端:Spring MVC 4和Java 8 前端:JQuery,Knockout.js,SlickGrid 持久层:MyBatis,MySql和MongoDB。 单元测试:JUnit 4,Mockito,Catch-Exception和...
充分的单元测试就是提高代码质量最有效的手段之一,而单元测试严重依赖代码的可测试性,本文主要通过一个简单的DEMO演示如何对Android原生应用进行单元测试,同时示例代码采用MVP模式以提高代码的可读性和可测试性 ...