|
16 | 16 |
|
17 | 17 | package org.metafacture.metamorph; |
18 | 18 |
|
19 | | -import static org.mockito.Mockito.inOrder; |
20 | | -import static org.mockito.Mockito.verify; |
21 | | -import static org.mockito.Mockito.verifyZeroInteractions; |
22 | | - |
23 | | -import org.junit.Before; |
| 19 | +import org.junit.Rule; |
24 | 20 | import org.junit.Test; |
25 | 21 | import org.metafacture.framework.StreamReceiver; |
26 | 22 | import org.mockito.InOrder; |
27 | 23 | import org.mockito.Mock; |
28 | | -import org.mockito.MockitoAnnotations; |
| 24 | +import org.mockito.Mockito; |
| 25 | +import org.mockito.exceptions.base.MockitoAssertionError; |
| 26 | +import org.mockito.junit.MockitoJUnit; |
| 27 | +import org.mockito.junit.MockitoRule; |
| 28 | + |
| 29 | +import java.util.function.BiConsumer; |
| 30 | +import java.util.function.Consumer; |
| 31 | +import java.util.function.Supplier; |
29 | 32 |
|
30 | 33 | /** |
31 | 34 | * Tests for class {@link Splitter}. |
|
36 | 39 | */ |
37 | 40 | public final class SplitterTest { |
38 | 41 |
|
| 42 | + @Rule |
| 43 | + public MockitoRule mockito = MockitoJUnit.rule(); |
| 44 | + |
39 | 45 | @Mock |
40 | 46 | private StreamReceiver receiver1; |
41 | 47 |
|
42 | 48 | @Mock |
43 | 49 | private StreamReceiver receiver2; |
44 | 50 |
|
45 | | - private Splitter splitter; |
46 | | - |
47 | | - @Before |
48 | | - public void setup() { |
49 | | - MockitoAnnotations.initMocks(this); |
50 | | - splitter = new Splitter("org/metafacture/metamorph/splitter-test.xml"); |
51 | | - splitter.setReceiver("receiver-1", receiver1); |
52 | | - splitter.setReceiver("receiver-2", receiver2); |
53 | | - } |
54 | | - |
55 | 51 | @Test |
56 | 52 | public void shouldPassRecordToReceiverWithMatchingKey() { |
57 | | - splitter.startRecord("1"); |
58 | | - splitter.startEntity("data"); |
59 | | - splitter.literal("forward-to", "receiver-1"); |
60 | | - splitter.endEntity(); |
61 | | - splitter.endRecord(); |
62 | | - splitter.startRecord("2"); |
63 | | - splitter.literal("forward-to", "receiver-2"); |
64 | | - splitter.endRecord(); |
65 | | - |
66 | | - final InOrder ordered = inOrder(receiver1, receiver2); |
67 | | - ordered.verify(receiver1).startRecord("1"); |
68 | | - ordered.verify(receiver1).startEntity("data"); |
69 | | - ordered.verify(receiver1).literal("forward-to", "receiver-1"); |
70 | | - ordered.verify(receiver1).endEntity(); |
71 | | - ordered.verify(receiver1).endRecord(); |
72 | | - ordered.verify(receiver2).startRecord("2"); |
73 | | - ordered.verify(receiver2).literal("forward-to", "receiver-2"); |
74 | | - ordered.verify(receiver2).endRecord(); |
75 | | - ordered.verifyNoMoreInteractions(); |
| 53 | + assertSplitter( |
| 54 | + i -> { |
| 55 | + i.startRecord("1"); |
| 56 | + i.startEntity("data"); |
| 57 | + i.literal("forward-to", "receiver-1"); |
| 58 | + i.endEntity(); |
| 59 | + i.endRecord(); |
| 60 | + i.startRecord("2"); |
| 61 | + i.literal("forward-to", "receiver-2"); |
| 62 | + i.endRecord(); |
| 63 | + }, |
| 64 | + (o1, o2) -> { |
| 65 | + o1.get().startRecord("1"); |
| 66 | + o1.get().startEntity("data"); |
| 67 | + o1.get().literal("forward-to", "receiver-1"); |
| 68 | + o1.get().endEntity(); |
| 69 | + o1.get().endRecord(); |
| 70 | + o2.get().startRecord("2"); |
| 71 | + o2.get().literal("forward-to", "receiver-2"); |
| 72 | + o2.get().endRecord(); |
| 73 | + } |
| 74 | + ); |
76 | 75 | } |
77 | 76 |
|
78 | 77 | @Test |
79 | 78 | public void shouldDiscardNonMatchingRecords() { |
80 | | - splitter.startRecord("1"); |
81 | | - splitter.literal("forward-to", "none"); |
82 | | - splitter.endRecord(); |
83 | | - |
84 | | - verifyZeroInteractions(receiver1, receiver2); |
| 79 | + assertSplitter( |
| 80 | + i -> { |
| 81 | + i.startRecord("1"); |
| 82 | + i.literal("forward-to", "none"); |
| 83 | + i.endRecord(); |
| 84 | + }, |
| 85 | + (o1, o2) -> { |
| 86 | + } |
| 87 | + ); |
85 | 88 | } |
86 | 89 |
|
87 | 90 | @Test |
88 | 91 | public void shouldPassResetStreamToAllReceivers() { |
89 | | - splitter.resetStream(); |
90 | | - |
91 | | - verify(receiver1).resetStream(); |
92 | | - verify(receiver2).resetStream(); |
| 92 | + assertSplitter( |
| 93 | + i -> { |
| 94 | + i.resetStream(); |
| 95 | + }, |
| 96 | + (o1, o2) -> { |
| 97 | + o1.get().resetStream(); |
| 98 | + o2.get().resetStream(); |
| 99 | + } |
| 100 | + ); |
93 | 101 | } |
94 | 102 |
|
95 | 103 | @Test |
96 | 104 | public void shouldPassCloseStreamToAllReceivers() { |
97 | | - splitter.closeStream(); |
| 105 | + assertSplitter( |
| 106 | + i -> { |
| 107 | + i.closeStream(); |
| 108 | + }, |
| 109 | + (o1, o2) -> { |
| 110 | + o1.get().closeStream(); |
| 111 | + o2.get().closeStream(); |
| 112 | + } |
| 113 | + ); |
| 114 | + } |
| 115 | + |
| 116 | + private void assertSplitter(final Consumer<Splitter> in, final BiConsumer<Supplier<StreamReceiver>, Supplier<StreamReceiver>> out) { |
| 117 | + final InOrder ordered = Mockito.inOrder(receiver1, receiver2); |
| 118 | + |
| 119 | + final Splitter splitter = new Splitter("org/metafacture/metamorph/splitter-test.xml"); |
| 120 | + splitter.setReceiver("receiver-1", receiver1); |
| 121 | + splitter.setReceiver("receiver-2", receiver2); |
| 122 | + |
| 123 | + in.accept(splitter); |
| 124 | + |
| 125 | + try { |
| 126 | + out.accept(() -> ordered.verify(receiver1), () -> ordered.verify(receiver2)); |
98 | 127 |
|
99 | | - verify(receiver1).closeStream(); |
100 | | - verify(receiver2).closeStream(); |
| 128 | + ordered.verifyNoMoreInteractions(); |
| 129 | + Mockito.verifyNoMoreInteractions(receiver1); |
| 130 | + Mockito.verifyNoMoreInteractions(receiver2); |
| 131 | + } |
| 132 | + catch (final MockitoAssertionError e) { |
| 133 | + System.out.println(Mockito.mockingDetails(receiver1).printInvocations()); |
| 134 | + System.out.println(Mockito.mockingDetails(receiver2).printInvocations()); |
| 135 | + throw e; |
| 136 | + } |
101 | 137 | } |
102 | 138 |
|
103 | 139 | } |
0 commit comments