|
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