Ответ 1
Эта функция встроена с Mockito 1.9.5. Просто используйте
mock(ClassToMock.class, withSettings().verboseLogging())
У меня есть unit test, который терпит неудачу, и я не уверен, почему. Я хочу видеть все вызовы в макете, которые происходят в System Under Test. Это не то поведение, которое я хочу для всех тестов всегда, просто для теста, который мне нужно быстро настроить, чтобы понять, что неправильно.
Однако, это похоже на хак. Можно ли сделать это изначально в Mockito, не используя Thread.currentThread().getStackTrace()
?
Это не является предпочтительным, поскольку трассировка стека включает в себя все другие вызовы, используемые внутри Mockito.
Эта функция встроена с Mockito 1.9.5. Просто используйте
mock(ClassToMock.class, withSettings().verboseLogging())
Мне удалось определить метод, в котором использует Thread.currentThread().getStackTrace()
, и перебирает элементы. Это некрасиво, но это делает работу. Я надеюсь, что у другого ответчика будет лучший метод.
InvocationListener
и передайте ему имя класса System Under Test.Mockito.withSettings().invocationListeners()
MockSettings
.Код 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;
}
}
}
}