2012-03-29 3 views
7

У меня есть класс, который реализует InvocationHandler, как показано ниже:Как мне высмеять java.lang.reflect.Method класс в PowerMockito?

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); 
    //... 
    } 
} 

Поскольку метод final, я сделал трюк @PrepareForTest, но это, кажется, не режет его. Это потому, что он загружен? Я просто собираюсь сделать это неправильно?

Я смотрел на ссылки ниже, но там нет ничего определенного там:

ответ

3

С PowerMock вы можете издеваться окончательный класс, однако, хотя я не считаю, что это документально, есть некоторые классы в пакете java.lang и java.lang.reflect, что вы только можете» t mock, потому что они слишком фундаментальны для того, как насмешливая структура делает это.

Я думаю, что они включают (но, возможно, не ограничиваются ими) java.lang.Class, java.lang.reflect.Method и java.lang.reflect.Constructor.

Однако, что вы пытаетесь сделать, это требует макетного метода? Вы можете создать реальный объект метода достаточно легко. Вы даже можете создать реальный объект метода в фиктивном классе, который вы могли бы проверить, чтобы увидеть, было ли оно когда-либо вызвано и с какими аргументами. Вы просто не можете использовать Mockito и Powermock для этого. Посмотрите, похожа ли ваша проблема на this question.

+0

Да, это похоже на аналогичную проблему. Я закончил путь создания объекта Method обычно из макета, а затем проверил, что метод был вызван в mock. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^