• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2017 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 package org.mockitousage.junitrule;
6 
7 import org.junit.Rule;
8 import org.junit.Test;
9 import org.junit.runner.JUnitCore;
10 import org.junit.runner.Result;
11 import org.mockito.exceptions.base.MockitoAssertionError;
12 import org.mockito.junit.MockitoJUnit;
13 import org.mockito.junit.VerificationCollector;
14 import org.mockitousage.IMethods;
15 
16 import static org.assertj.core.api.Assertions.assertThat;
17 import static org.junit.Assert.fail;
18 import static org.mockito.Mockito.*;
19 
20 public class VerificationCollectorImplTest {
21 
22     @Test
should_not_throw_any_exceptions_when_verifications_are_successful()23     public void should_not_throw_any_exceptions_when_verifications_are_successful() {
24         VerificationCollector collector = MockitoJUnit.collector().assertLazily();
25 
26         IMethods methods = mock(IMethods.class);
27         methods.simpleMethod();
28 
29         verify(methods).simpleMethod();
30         collector.collectAndReport();
31     }
32 
33     @Test(expected = MockitoAssertionError.class)
should_collect_verification_failures()34     public void should_collect_verification_failures() {
35         VerificationCollector collector = MockitoJUnit.collector().assertLazily();
36 
37         IMethods methods = mock(IMethods.class);
38 
39         verify(methods).simpleMethod();
40         collector.collectAndReport();
41     }
42 
43     @Test
should_collect_multiple_verification_failures()44     public void should_collect_multiple_verification_failures() {
45         VerificationCollector collector = MockitoJUnit.collector().assertLazily();
46 
47         IMethods methods = mock(IMethods.class);
48 
49         verify(methods).simpleMethod();
50         verify(methods).byteReturningMethod();
51         try {
52             collector.collectAndReport();
53             fail();
54         } catch (MockitoAssertionError error) {
55             assertThat(error).hasMessageContaining("1. Wanted but not invoked:");
56             assertThat(error).hasMessageContaining("2. Wanted but not invoked:");
57         }
58     }
59 
60     @Test
should_only_collect_failures_ignore_successful_verifications()61     public void should_only_collect_failures_ignore_successful_verifications() {
62         VerificationCollector collector = MockitoJUnit.collector().assertLazily();
63 
64         IMethods methods = mock(IMethods.class);
65 
66         verify(methods, never()).simpleMethod();
67         verify(methods).byteReturningMethod();
68 
69         this.assertAtLeastOneFailure(collector);
70     }
71 
72     @Test
should_continue_collecting_after_failing_verification()73     public void should_continue_collecting_after_failing_verification() {
74         VerificationCollector collector = MockitoJUnit.collector().assertLazily();
75 
76         IMethods methods = mock(IMethods.class);
77         methods.simpleMethod();
78 
79         verify(methods).byteReturningMethod();
80         verify(methods).simpleMethod();
81 
82         this.assertAtLeastOneFailure(collector);
83     }
84 
assertAtLeastOneFailure(VerificationCollector collector)85     private void assertAtLeastOneFailure(VerificationCollector collector) {
86         try {
87             collector.collectAndReport();
88             fail();
89         } catch (MockitoAssertionError error) {
90             assertThat(error).hasMessageContaining("1. Wanted but not invoked:");
91             assertThat(error.getMessage()).doesNotContain("2.");
92         }
93     }
94 
95     @Test
should_invoke_collector_rule_after_test()96     public void should_invoke_collector_rule_after_test() {
97         JUnitCore runner = new JUnitCore();
98         Result result = runner.run(VerificationCollectorRuleInner.class);
99 
100         assertThat(result.getFailureCount()).isEqualTo(1);
101         assertThat(result.getFailures().get(0).getMessage()).contains("1. Wanted but not invoked:");
102     }
103 
104     // This class is picked up when running a test suite using an IDE. It fails on purpose.
105     public static class VerificationCollectorRuleInner {
106 
107         @Rule
108         public VerificationCollector collector = MockitoJUnit.collector();
109 
110         @Test
should_fail()111         public void should_fail() {
112             IMethods methods = mock(IMethods.class);
113 
114             verify(methods).simpleMethod();
115         }
116 
117         @Test
should_not_fail()118         public void should_not_fail() {
119             IMethods methods = mock(IMethods.class);
120             methods.simpleMethod();
121 
122             verify(methods).simpleMethod();
123         }
124     }
125 }
126