Как мне высмеять класс java.lang.reflect.Method в PowerMockito? - PullRequest
9 голосов
/ 29 марта 2012

У меня есть класс, который реализует 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);
    //...
  }
}

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

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

1 Ответ

5 голосов
/ 29 марта 2012

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

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

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

...