`
dannyhz
  • 浏览: 398823 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

PowerMock mock static 方法遇到问题

 
阅读更多
今天因为要模拟静态方法,所有找到powermock 遇到2个问题
1. 跑junit的时候,出现initialize error,  stackoverflow 查到是 版本问题

4.11的 junit,居然 powermock认不得

http://stackoverflow.com/questions/26192929/unable-to-run-junit-test-with-powermockrunner

现在用的 版本是 

<powermock.version>1.4.10</powermock.version>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>

<dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.powermock</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
   </dependency>

这样 junit可以跑了

2. 然后遇到 第二个 问题 The method when is ambiguous for the type
发现是 在 引入 static PowerMockito 对象时, 让when 方法 识别 不了用哪个方法了,所有 把 static import去掉了
直接用  PowerMockito.when(ABC.getvalue()).thenReturn("dfd");




import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;




@RunWith(PowerMockRunner.class)
@PrepareForTest(ABC.class)
public class TestTableDdlSeq {



@Test
public void testHandlePriorityTables(){
PowerMockito.mockStatic(ABC.class);

PowerMockito.when(ABC.getvalue()).thenReturn("dfd");
System.out.println(ABC.getvalue());



}
}


class ABC{
static String getvalue(){
return "abc";
}
}

这样执行后 , 果然打印出 结果 dfd, 成功了 , 终于可以 mock static方法了!!

http://www.ibm.com/developerworks/cn/java/j-lo-powermock/
分享到:
评论

相关推荐

    利用PowerMock模拟静态方法和私有方法的示例

    PowerMock允许我们使用`@PrepareForTest`注解指定需要模拟的类,并通过`PowerMockito.mockStatic`或`Mockito.when`来模拟私有方法。 下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import ...

    使用PowerMock来Mock静态函数

    3. 创建Mock:在测试方法中,使用`PowerMockito.mockStatic(Class)`来模拟整个静态类,或者使用`PowerMockito.when(Class.method()).thenReturn(value)`来指定静态方法在特定条件下的返回值。 4. 执行测试:进行正常...

    powermock单元测试

    3. **模拟静态方法**:使用`PowerMockito.mockStatic(Class&lt;?&gt; clazz)`来模拟静态方法。然后通过`when`和`thenReturn`(或其他方法)来定义静态方法的行为。 4. **模拟私有方法**:首先,需要使用`PowerMockito.spy...

    Instant Mock Testing with PowerMock.pdf

    Instant Mock Testing with PowerMock 7 Saying Hello World! (Simple) 8 Getting and installing PowerMock (Simple) 14 Mocking static methods (Simple) 22 Verifying method invocation (Simple) 28 Mocking ...

    PowerMock实战

    在后续章节中,将会进一步深入讲解PowerMock的高级特性,比如如何模拟局部变量(MockLocalVariable),如何模拟静态方法(MockStatic)以及如何使用验证(Verifying)。此外,本书还介绍了如何模拟私有方法、构造...

    powermock

    PowerMock 提供了 `PowerMockito.mockStatic` 方法,允许我们指定静态方法的行为,从而在测试中隔离静态方法的依赖。 3. **构造函数模拟**: 有些情况下,被测试类可能依赖于私有构造函数或不可实例化的类。...

    powerMock的测试样例集合

    通过`PowerMockito.mockStatic()`方法,我们可以创建一个静态方法的模拟对象,然后设置期望行为和返回值。 2. **Mock Final Classes and Methods**: 最终(final)类和方法也不能被常规方式覆写,但PowerMock可以...

    PowerMock.zip

    PowerMockito.mockStatic(SomeStaticClass.class); when(SomeStaticClass.staticMethod()).thenReturn("mocked value"); // 测试代码 String result = myCodeUnderTest(); // 验证 verifyStatic(); ...

    PowerMock实战手册.pdf

    在单元测试中,可以使用MockStatic来模拟静态方法,以测试依赖于这些方法的代码。 ### Verifying #### 使用场景 验证是一个重要环节,用于检查方法是否按照预期被调用。 #### 业务代码 在编写业务代码时,为了...

    powermock-easymock-junit-1.6.1.zip

    5. 在测试方法中,使用`PowerMockito.mockStatic()`模拟静态方法,`when()`定义期望行为,`thenReturn()`等方法指定返回值。 6. 执行实际的测试代码,并在测试方法后使用`verify()`检查mock对象的行为是否符合预期。...

    powermock-easymock-junit-1.5.4.zip

    3. 使用PowerMock创建需要模拟的对象,例如`PowerMockito.mockStatic(YourClass.class)`。 4. 使用EasyMock或Mockito定义模拟对象的行为和期望。 5. 使用JUnit的@Test注解编写测试用例,运行测试。 总的来说,...

    powermock实战手册

    3. **模拟对象**:使用`PowerMockito.mockStatic`或`PowerMockito.mock`来模拟静态方法或类。 4. **配置模拟行为**:使用`when()`方法指定模拟对象的行为,`thenReturn()`、`thenThrow()`等方法定义返回值或异常。 ...

    PowerMock学习指南

    3. **测试规则**:在测试方法中,你可以使用`PowerMockito.mockStatic`来模拟静态方法,或者使用`PowerMockito.when`来定义静态方法的行为。 ### PowerMock核心功能 1. **模拟静态方法**:PowerMock允许你模拟任何...

    PowerMock是一个Java框架能够允许你单元测试通常被视为不可测试的代码

    在传统的单元测试中,static、private、final方法以及构造函数的调用通常是不可模拟的,因为它们不受常规的面向对象编程规则约束,而PowerMock就是为了打破这些限制而设计的。 在Java开发中,单元测试是非常关键的...

    junit_powermock:一种简单的 JUnit 单元测试方法,以及 Powermock 的使用

    4. **测试逻辑**:在测试方法中,首先使用`PowerMockito.mockStatic()`或`PowerMockito.spy()`来初始化模拟对象。然后,执行被测试代码,最后通过`verify()`方法检查模拟对象的调用情况,确保其行为符合预期。 5. *...

    PowerMock资料大全(E文)

    Developers familiar with the supported mock frameworks will find PowerMock easy to use, since the entire expectation API is the same, both for static methods and constructors. PowerMock aims to ...

    powermock-mockito-demo:使用springboot的powermock-mockito-demo

    使用在springboot项目中使用powermock-mockito进行单元测试,演示mock static、private、whenNew、exception的测试。 注意 示例使用spring-boot 2.0.3.RELEASE 它间接引用 junit-4.12 mockito-core-2.15.0 但是官网...

    mock学习交流

    除了Mockito,Java社区还提供了其他mock工具,例如PowerMock,它扩展了Mockito的功能,允许我们模拟静态方法、构造函数、final类和方法,甚至私有方法,这些在标准Mockito中通常是不允许的。 在实际项目中,mock...

    powermock-demo:powermock演示

    3. **模拟方法**:在测试方法内部,使用 `PowerMockito.mockStatic()` 或 `PowerMockito.when()` 来模拟静态方法,`Mockito.when()` 用于模拟非静态方法。 4. **验证行为**:使用 `Mockito.verify()` 来检查方法是否...

Global site tag (gtag.js) - Google Analytics