2014-06-18 3 views
17

Mam test jednostkowy, który się nie udał i nie jestem pewien dlaczego. Chcę móc zobaczyć wszystkie inwokacje na próbce, które występują w testowanym systemie. Nie jest to zachowanie, którego zawsze chcę używać przy wszystkich testach, po prostu dla testu, który muszę szybko zmienić, aby móc zrozumieć, co jest nie tak.Jak używać Mockito do pokazywania wszystkich wywołań na próbnym

Jednak wygląda na to, że jest hackerem. Czy można to zrobić natywnie w Mockito, bez konieczności używania Thread.currentThread().getStackTrace()?

Nie jest to preferowane, ponieważ ślad stosu zawiera wszystkie inne wywołania używane wewnętrznie przez Mockito.

Odpowiedz

28

Ta funkcja jest wbudowane od Mockito 1.9.5. Po prostu użyj

+0

Wow. Wygląda na to, że podczas czytania Javadoca doznałem chwilowej ślepoty. Dzięki :) – durron597

0

Udało mi się określić metodę, która ma użyć Thread.currentThread().getStackTrace() i zapętlać elementy. Jest brzydki, ale spełnia swoją rolę. Mam nadzieję, że inny odbierający będzie miał lepszą metodę.

  1. Utwórz numer InvocationListener i przekaż mu nazwę klasy Testowany system.
  2. Przeprowadź słuchanie do obiektu Mockito.withSettings().invocationListeners()
  3. Tymczasowo zmodyfikuj test, aby utworzyć próbę za pomocą tego obiektu MockSettings.

Kod InvocationListener:

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; 
      } 
     } 
    } 
}