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,因为它可能会掩盖代码设计的问题。尽可能保持代码的可测试性,只有在必要时才使用这种高级模拟技术。此外,使用 PowerMock 可能会使测试变得更复杂,需要更多的时间去...
在实际应用中,要使用PowerMock,你需要在项目的构建配置中添加这些JAR依赖,然后在测试类上使用注解如`@RunWith(PowerMockRunner.class)`和`@PrepareForTest`来启用PowerMock的功能。接着,你可以使用Mockito的语法...
11. **总结**:最后,课程会回顾整个PowerMock的学习过程,强调关键点,并给出实际应用中的最佳实践建议。 通过这些实战教程,开发者能够有效地利用PowerMock进行复杂场景的单元测试,提高测试覆盖率,保证代码质量...
PowerMock是一个强大的Java单元测试框架,它允许测试代码中静态方法、私有方法以及final类的模拟...通过阅读本书,读者可以掌握使用PowerMock进行高效单元测试的技巧,并在实际开发工作中应用这些知识,提高代码质量。
在实际应用中,我们可以使用PowerMock和Mockito的组合来模拟那些难以测试的场景,例如: 1. **模拟静态方法**:静态方法通常与具体的实现紧密绑定,不容易被替换。PowerMock允许我们创建mock的静态方法,从而在测试...
当与PowerMock和EasyMock结合时,JUnit可以更全面地测试复杂的应用程序。 在"powermock-easymock-junit-1.5.4.zip"这个压缩包中,可能包含以下内容: 1. PowerMock的核心库:powermock-api-easymock、powermock-...
PowerMock 是一个强大的Java单元测试框架的扩展,它允许开发者模拟静态方法、构造函数、final 类、enum 和...如果你在IBM DeveloperWorks找到的资源能够提供详细的教程和示例,那么对于学习和应用PowerMock将大有裨益。
在与Mockito和PowerMock结合使用时,JUnit提供了一个执行测试的平台,开发者可以在其中应用mocking和模拟技术来验证代码的正确性。 在下载的压缩包中,可能包含以下内容: - PowerMock-Mockito的jar文件:这些文件...
通过提供定制的类加载器以及一些字节码篡改技巧的应用,PowerMock 现了对静态方法、构造方法、私有方法以及 Final 方法的模拟支持,对静态初始化过程的移除等强大的功能。因为 PowerMock 在扩展功能时完全采用和被...
6. **Examples in the Archive**: "PowerMockStudy"这个文件夹可能包含了各种示例代码,这些代码展示了上述所有概念的实际应用。每个示例通常包括测试类和被测试类,以及具体的PowerMock配置和使用。通过仔细研究...
除了`@RunWith`,还可以使用`PowerMockRule`作为测试规则,它可以提供更细粒度的控制,只在特定测试方法中应用PowerMock的功能。 10. **`verifyStatic`** PowerMockito的`verifyStatic`方法用于验证静态方法是否...
在实际应用中,我们通常会按照以下步骤进行: 1. 引入PowerMock和EasyMock的依赖到项目中,这可以通过Maven或Gradle等构建工具实现。 2. 使用`@RunWith(PowerMockRunner.class)`注解标记测试类,表示我们要使用...
PowerMock和EasyMock是Java单元测试领域中的两个重要工具,它们允许开发者模拟和控制对象...通过深入研究这些文档,开发者可以更好地掌握如何有效地在自己的项目中应用PowerMock和EasyMock,从而提升测试的质量和效率。
### PowerMock介绍 ...文中还强调了编程知识与实际应用的关系,以及面对英语阅读难题时如何寻找帮助。最后,作者通过自身经验,强调了总结与分享的重要性,以及如何通过写书的方式帮助他人,同时促进自我成长。
标题 "powermock-module-testng-common-1.5.4.zip" 暗示这是一个与PowerMock相关的库,特别地,是针对TestNG测试框架的模块。PowerMock是一个强大的Java单元测试工具,它允许开发者模拟静态方法、构造函数、final类...
然而,当涉及到静态方法时,由于它们属于类级别而非实例级别,常规的依赖注入和模拟策略就无法应用。PowerMock通过字节码操作技术,允许我们模拟静态方法的行为,从而在测试中控制其返回值或行为。 对于private方法...
该项目的目的是向开发者展示 PowerMock 的基本用法和常见应用场景,帮助他们更好地理解和掌握这一工具。 首先,我们需要了解 PowerMock 的核心概念: 1. **类模拟(Class Mocking)**:允许模拟 final 类和无法实例...
PowerMock的核心功能在于其能够通过提供定制的类加载器和应用一些字节码操作技巧,实现对静态方法、构造方法、私有方法和final方法的模拟。例如,在进行单元测试时,有时候我们并不希望测试数据进入实际的数据库,...
综上所述,"powermock-examples-documentationexamples-1.4.10.zip" 提供的资源对于学习和使用PowerMock进行单元测试非常有价值,同时proxy-servlet.zip 则为解决GWT应用的跨域问题提供了实用的解决方案。...