2014-06-18 6 views
17

단위 테스트에 실패했습니다. 이유가 확실하지 않습니다. 테스트중인 시스템에서 발생하는 모의의 모든 호출을 볼 수 있기를 원합니다. 이것은 내가 모든 테스트에 대해 항상 원하는 동작이 아니라, 무엇이 잘못되었는지를 신속하게 파악할 수 있도록 테스트해야한다는 것입니다.Mockito를 사용하여 모의 모든 호출을 표시하는 방법

그러나 해킹과 비슷합니다. Thread.currentThread().getStackTrace()을 사용하지 않고도 Mockito에서 기본적으로이 작업을 수행 할 수 있습니까?

스택 추적에 Mockito에서 내부적으로 사용하는 다른 모든 호출이 포함되어 있기 때문에 바람직하지 않습니다.

답변

28

. 그냥

mock(ClassToMock.class, withSettings().verboseLogging()) 
+0

와우. Javadoc을 읽을 때 순간적으로 실명을 겪었습니다. 감사 :) – durron597

0

나는 이되고 Thread.currentThread().getStackTrace()을 사용하는 방법을 결정할 수 있었고 요소를 루핑했다. 못 생겼지 만 그 일을한다. 다른 응답자가 더 나은 방법을 갖기를 바랍니다.

  1. InvocationListener을 만들고 테스트중인 시스템의 클래스 이름을 전달하십시오.
  2. 수신기를 Mockito.withSettings().invocationListeners()
  3. 으로 일시적으로 변경하여이 MockSettings 개체로 모의를 만듭니다. InvocationListener

코드 :이 기능은 Mockito 1.9.5부터 내장되어

public static class DebugInvocationListener implements 
     InvocationListener { 
    private final String className; 

    public DebugInvocationListener(Class<?> klass) { 
     this(klass.getName()); 
    } 

    public DebugInvocationListener(String className) { 
     this.className = className; 
    } 

    @Override 
    public void reportInvocation(MethodInvocationReport report) { 
     System.out.println(report.getInvocation()); 
     StackTraceElement[] trace = Thread.currentThread().getStackTrace(); 
     for(StackTraceElement element : trace) { 
      if(element.getClassName().equals(className)) { 
       System.out.println(element); 
       System.out.println(); 
       break; 
      } 
     } 
    } 
} 
관련 문제