unit-testing - 如何在PowerMockito中模拟java.lang.reflect.Method类?

标签 unit-testing junit mocking mockito powermock

我有一个实现InvocationHandler的类,如下所示:

public class MyProxyClass implements InvocationHandler
{
  public Object invoke (Object proxy, Method method, Object[] args) throws Throwable
  {
    //Do something interesting here
  }
}

我试图使用PowerMock&Mockito在单元测试类中传递一个模拟方法对象:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Method.class})
public class MyProxyTest
{
  MyProxy underTest;

  @Test
  public void testInvoke() throws Throwable
  {
    Method mockMethod = mock(Method.class);
    //...
  }
}

由于Method是final,所以我完成了@PrepareForTest技巧,但这似乎并没有解决。 这是因为它被引导了吗?我只是要解决这个问题吗?

我一直在看下面的链接,但那里没有确定的内容:
  • https://code.google.com/p/powermock/wiki/MockitoUsage13
  • https://code.google.com/p/powermock/wiki/MockSystem
  • 这似乎比静态方法更适合于静态方法。
  • 最佳答案

    使用PowerMock可以模拟最终的类,但是,尽管我不相信有记载,但是java.lang和java.lang.reflect包中有些类是您不能模拟的,因为它们对于如何实现太基础了模拟框架就可以了。

    我认为这些包括(但可能不限于)java.lang.Class,java.lang.reflect.Method和java.lang.reflect.Constructor。

    但是,您要做什么需要模拟方法呢?您可以很容易地创建一个真实的方法对象。您甚至可以在虚拟类上创建一个真实的方法对象,然后可以检查该对象是否曾经被调用以及使用了哪些参数。您只是无法使用Mockito和Powermock来做到这一点。查看您的问题是否类似于this question

    关于unit-testing - 如何在PowerMockito中模拟java.lang.reflect.Method类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928432/

    相关文章:

    Python单元测试,仅运行失败的测试

    ios - 测试是否在 View Controller 方法中调用了 performSegueWithIdentifier

    java - CalledFromWrongThreadException 在 Android 上执行 JUnit 测试

    加载上下文配置时,Spring MVC 测试出错

    database - 何时模拟数据库访问

    mocking - 此测试是否正确使用了AutoFixture和Moq?

    android - 单元测试用例中未调用 AsyncTask onPostExecute()

    c# - 如何为 CRM 2011 插件正确设置 C# 单元测试?

    java - 如何测试和模拟mapstruct转换器?

    C# - Moq - 模拟接口(interface)的对象是代理而不是公开的类