2014-12-31 2 views
0

Я вижу ошибку утверждения, когда включаю Throwable при вызове метода Log4j.error. У меня есть Logger.class, PrintWriter.class, AuthenticationException.class в блоке @PreparateForTest. Я не вижу ошибки, если я не передаю Throwable в качестве аргумента.EasyMock AssertionError при вызове Logger.error (String, Throwable)

Что мне недостает в правильной настройке mocks?

Caused by: java.lang.AssertionError: 
     Unexpected method call AuthenticationException.printStackTrace([email protected]): 
      at org.junit.Assert.fail(Assert.java:93) 
      at com.xxx.yy.security.client.ClientTest.authenticateFail(ClientTest.java:282) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:606) 
      at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66) 
      at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310) 
      ... 23 more 

JUnit тест фрагмент кода, как показано ниже:

AuthenticationException mockAuthException = PowerMock 
         .createMock(AuthenticationException.class); 
    PrintWriter mockPrintWriter = PowerMock 
         .createMock(PrintWriter.class); 
    Logger mockLogger = PowerMock.createMock(Logger.class); 
    String message = "blah"; 
    mockLogger.error(message, mockAuthException); 
    EasyMock.expectLastCall(); 

    mockAuthException.printStackTrace(mockPrintWriter); 
    EasyMock.expectLastCall(); 

Фрагмент кода, который вызывает проблему, как показано ниже:

try{ 
    . 
    . 
    }catch (AuthenticationException ex) { 
     LOGGER.error("SOME MESSAGE HERE", ex); 
     throw ex; 
    } 

ответ

0

LOGGER.error("SOME MESSAGE HERE", ex);

Эта линия, как представляется, вызывая метод printStacktraceex, т.е. AuthenticationException type. Поскольку вы издеваетесь над этим, вы должны указать поведение, с которым должен вести себя объект (макет, технически), когда этот вызов встречается.

У вас есть 3 варианта, кроме расслабления verification конечно через использование nice mocks, если вы на самом деле ожидать, что это исключение будет выброшен (ваш вопрос немного расплывчато об этом):

  • См если вы можете ожидать LOGGER.error("SOME MESSAGE HERE", ex);, то есть высмеивать LOGGER. LOGGER, как представляется static переменным, но вы, кажется, используют Powermock, так что я не думаю, что вы будете иметь никаких проблем насмешливых, но если у вас есть проблемы насмехаясь LOGGER, читайте на

  • Расскажите Easymock, как он должен реагировать, когда он встречает printStacktrace вызов метода на макете объекта mockAuthException путем размещения ожидания на нем, как это (printStacktrace будучи void метод) перед вами replay макет:

    mockAuthException.printStacktrace(); expectLastCall().andDoSomethingIfNeeded();

  • Не издевайтесь над типом AuthenticationException, если это абсолютно необходимо - это похоже на то, что вы можете обойтись без издевательства над ним, скажем, путем создания типа Stub.

1

вы получаете Unexpected method call error, которая может быть решена следующим образом:

AuthenticationException mockAuthException = EasyMock.createNiceMock(AuthenticationException.class); 
PrintWriter mockPrintWriter = EasyMock.createNiceMock(PrintWriter.class); 
Logger mockLogger = EasyMock.createNiceMock(Logger.class); 
String message = "blah"; 
mockLogger.error(message, mockAuthException); 
EasyMock.expectLastCall(); 

mockAuthException.printStackTrace(mockPrintWriter); 
EasyMock.expectLastCall(); 

Изменения более здесь используют EasyMock вместо powermock и создание niceMock вместо обычного издеваться.

createMock(..) метод является строгим и не может определить, если метод внутренне называются или нет, но при использовании createNiceMock(..) этот чек игнорируется, и вы не получите UnexpectedMethodCall ошибки

Надеется, что это помогает!

Удачи вам!

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