gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:13:45 24 4
gpt4 key购买 nike

我有一个实现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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com