2015-05-11 13 views
0

Конструктор InetAddress не отображается, поскольку используется шаблон фабрики.Как издеваться над InetAddress.getLocalHost() с помощью JMockit

final InetAddress anyInstance = InetAddress.getLocalHost(); 
    new NonStrictExpectations(InetAddress.class) { 
     { 
     anyInstance.getHostAddress(); 
     result = "192.168.0.101"; 
     } 
    }; 

Когда я пытаюсь использовать фабричный метод для получения экземпляра для частичных насмешек я получаю ошибку:

java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter 

ответ

1

Вы должны указать, что InetAddressи любых подклассы должны быть издевались:

@Test 
public void mockAnyInetAddress(@Capturing final InetAddress anyInstance) 
    throws Exception 
{ 
    new Expectations() {{ 
     anyInstance.getHostAddress(); result = "192.168.0.101"; 
    }}; 

    String localHostAddress = InetAddress.getLocalHost().getHostAddress(); 

    assertEquals("192.168.0.101", localHostAddress); 
} 
+0

Похоже, что это не правильно частично насмехается в сочетании с захватом. Когда я запускаю ваш точный код, я получаю: mockit.internal.UnexpectedInvocation: Неожиданный вызов: java.net.InetAddress # getLocalHost() Если я установил его как NonStrictExpectations, я получаю исключение из null-указателя, потому что getLocalHost возвращает null. Я использую JMockit 1.8, который выглядит год. Я посмотрю, исправляет ли его более новую версию. – johnjamesmiller

+0

выглядит как проблема с 1.8. он отлично работает в 1.17. не знаю, какая версия была исправлена. Спасибо за вашу помощь! – johnjamesmiller

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