| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| package org.mockito.internal.debugging; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.mockito.internal.handler.NotifiedMethodInvocationReport; |
| import org.mockito.internal.invocation.InvocationBuilder; |
| import org.mockito.internal.invocation.StubInfoImpl; |
| import org.mockito.invocation.DescribedInvocation; |
| import org.mockito.invocation.Invocation; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.PrintStream; |
| |
| import static org.assertj.core.api.Assertions.assertThat; |
| |
| public class VerboseMockInvocationLoggerTest { |
| |
| private VerboseMockInvocationLogger listener; |
| |
| private ByteArrayOutputStream output; |
| private Invocation invocation = new InvocationBuilder().toInvocation(); |
| private DescribedInvocation stubbedInvocation = new InvocationBuilder().toInvocation(); |
| |
| @Before |
| public void init_Listener() throws Exception { |
| output = new ByteArrayOutputStream(); |
| listener = new VerboseMockInvocationLogger(new PrintStream(output)); |
| } |
| |
| @After |
| public void tearDown() throws Exception { |
| System.out.println(output); |
| } |
| |
| @Test |
| public void should_print_to_system_out() { |
| assertThat(new VerboseMockInvocationLogger().printStream).isSameAs(System.out); |
| } |
| |
| @Test |
| public void should_print_invocation_with_return_value() { |
| // when |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, "return value")); |
| |
| // then |
| assertThat(printed()) |
| .contains(invocation.toString()) |
| .contains(invocation.getLocation().toString()) |
| .contains("return value"); |
| } |
| |
| @Test |
| public void should_print_invocation_with_exception() { |
| // when |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, new ThirdPartyException())); |
| |
| // then |
| assertThat(printed()) |
| .contains(invocation.toString()) |
| .contains(invocation.getLocation().toString()) |
| .contains(ThirdPartyException.class.getName()); |
| } |
| |
| @Test |
| public void should_print_if_method_has_not_been_stubbed() throws Exception { |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, "whatever")); |
| |
| assertThat(printed()).doesNotContain("stubbed"); |
| } |
| |
| @Test |
| public void should_print_stubbed_info_if_availbable() throws Exception { |
| invocation.markStubbed(new StubInfoImpl(stubbedInvocation)); |
| |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, "whatever")); |
| |
| assertThat(printed()) |
| .contains("stubbed") |
| .contains(stubbedInvocation.getLocation().toString()); |
| } |
| |
| @Test |
| public void should_log_count_of_interactions() { |
| // when & then |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, new ThirdPartyException())); |
| assertThat(printed()).contains("#1"); |
| |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, new ThirdPartyException())); |
| assertThat(printed()).contains("#2"); |
| |
| listener.reportInvocation(new NotifiedMethodInvocationReport(invocation, new ThirdPartyException())); |
| assertThat(printed()).contains("#3"); |
| } |
| |
| private String printed() { |
| return output.toString(); |
| } |
| |
| private static class ThirdPartyException extends Exception { |
| private static final long serialVersionUID = 3022739107688491354L; |
| } |
| } |