【问题标题】:Can Powermockito mock final method in non-final concrete class?Powermockito 可以在非最终具体类中模拟最终方法吗?
【发布时间】:2012-08-27 09:23:40
【问题描述】:

假设我有一个非最终的具体类,其最终方法如下所示。

public class ABC {
  public final String myMethod(){
      return "test test";
  }
}

当使用Powermockitojunit 中调用它时,是否可以模拟myMethod() 以返回其他内容?谢谢

【问题讨论】:

    标签: java unit-testing powermock


    【解决方案1】:

    这行得通:

    @RunWith(PowerMockRunner.class)
    @PrepareForTest(ABC.class)
    public class ABCTest {
    
        @Test
        public void finalCouldBeMock() {
            final ABC abc = PowerMockito.mock(ABC.class);
            PowerMockito.when(abc.myMethod()).thenReturn("toto");
            assertEquals("toto", abc.myMethod());
        }
    }
    

    【讨论】:

    • 是的,它应该可以工作,但是当我尝试时,我总是在下面遇到异常。我想知道我是否设置了错误? java.lang.NoClassDefFoundError: org/mockito/internal/MockitoInvocationHandler at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:138) at ABCTest.finalCouldBeMock(ABCTest.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source)
    • @surawatthana 你必须在你的类路径中添加 Mockito
    • 您好 Gontard,如何在 Eclipse 的类路径中添加 Mockito?
    • 为什么你们总是认为静态导入是显而易见的?提到您调用 PowerMockito.when(...) 非常有帮助(即使考虑到我们可以预期您正在使用 PowerMockito 的问题)
    • 另外,请确保您是从 org.powermock.api.mockito.PowerMockito 而不是从 org.mockito.Mockito 静态导入 mock()。我的 IDE 自动从后一个包导入,导致无法模拟最终方法的错误。
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多