blob: e6a165065c929c1303789cdfa6603e712b298348 [file] [log] [blame]
package org.mockitousage.junitrule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.mockito.exceptions.base.MockitoAssertionError;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.VerificationCollector;
import org.mockitousage.IMethods;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;
public class VerificationCollectorImplTest {
@Test
public void should_not_throw_any_exceptions_when_verifications_are_succesful() {
VerificationCollector collector = MockitoJUnit.collector().assertLazily();
IMethods methods = mock(IMethods.class);
methods.simpleMethod();
verify(methods).simpleMethod();
collector.collectAndReport();
}
@Test(expected = MockitoAssertionError.class)
public void should_collect_verification_failures() {
VerificationCollector collector = MockitoJUnit.collector().assertLazily();
IMethods methods = mock(IMethods.class);
verify(methods).simpleMethod();
collector.collectAndReport();
}
@Test
public void should_collect_multiple_verification_failures() {
VerificationCollector collector = MockitoJUnit.collector().assertLazily();
IMethods methods = mock(IMethods.class);
verify(methods).simpleMethod();
verify(methods).byteReturningMethod();
try {
collector.collectAndReport();
fail();
} catch (MockitoAssertionError error) {
assertThat(error).hasMessageContaining("1. Wanted but not invoked:");
assertThat(error).hasMessageContaining("2. Wanted but not invoked:");
}
}
@Test
public void should_only_collect_failures_ignore_succesful_verifications() {
VerificationCollector collector = MockitoJUnit.collector().assertLazily();
IMethods methods = mock(IMethods.class);
verify(methods, never()).simpleMethod();
verify(methods).byteReturningMethod();
this.assertAtLeastOneFailure(collector);
}
@Test
public void should_continue_collecting_after_failing_verification() {
VerificationCollector collector = MockitoJUnit.collector().assertLazily();
IMethods methods = mock(IMethods.class);
methods.simpleMethod();
verify(methods).byteReturningMethod();
verify(methods).simpleMethod();
this.assertAtLeastOneFailure(collector);
}
private void assertAtLeastOneFailure(VerificationCollector collector) {
try {
collector.collectAndReport();
fail();
} catch (MockitoAssertionError error) {
assertThat(error).hasMessageContaining("1. Wanted but not invoked:");
assertThat(error.getMessage()).doesNotContain("2.");
}
}
@Test
public void should_invoke_collector_rule_after_test() {
JUnitCore runner = new JUnitCore();
Result result = runner.run(VerificationCollectorRuleInner.class);
assertThat(result.getFailureCount()).isEqualTo(1);
assertThat(result.getFailures().get(0).getMessage()).contains("1. Wanted but not invoked:");
}
// This class is picked up when running a test suite using an IDE. It fails on purpose.
public static class VerificationCollectorRuleInner {
@Rule
public VerificationCollector collector = MockitoJUnit.collector();
@Test
public void should_fail() {
IMethods methods = mock(IMethods.class);
verify(methods).simpleMethod();
}
@Test
public void should_not_fail() {
IMethods methods = mock(IMethods.class);
methods.simpleMethod();
verify(methods).simpleMethod();
}
}
}