Skip to content

Commit 78c6a1f

Browse files
committed
Migrate unit tests to Mockito 2.x
This commit completely migrates from EasyMock to Mockito 2.x. Unit tests have been updated to use the BDD-style of Mockito's API (given/when/then). Various test cleanups were also included during the migration. Related to LOG4J2-1646.
1 parent f3e9ea1 commit 78c6a1f

22 files changed

Lines changed: 658 additions & 1252 deletions

log4j-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@
203203
</dependency>
204204
<!-- Mocking framework for use with JUnit -->
205205
<dependency>
206-
<groupId>org.easymock</groupId>
207-
<artifactId>easymock</artifactId>
206+
<groupId>org.mockito</groupId>
207+
<artifactId>mockito-core</artifactId>
208208
<scope>test</scope>
209209
</dependency>
210210
<!-- Embedded JDBC drivers for database appender tests -->

log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,25 @@
2727
import org.apache.logging.log4j.core.layout.PatternLayout;
2828
import org.apache.logging.log4j.message.SimpleMessage;
2929
import org.apache.logging.log4j.util.Strings;
30-
import org.easymock.EasyMockSupport;
3130
import org.junit.AfterClass;
3231
import org.junit.Assert;
3332
import org.junit.Before;
3433
import org.junit.BeforeClass;
3534
import org.junit.Test;
35+
import org.junit.runner.RunWith;
36+
import org.mockito.Mock;
37+
import org.mockito.runners.MockitoJUnitRunner;
3638

37-
import static org.easymock.EasyMock.anyInt;
38-
import static org.easymock.EasyMock.anyObject;
39-
import static org.easymock.EasyMock.expectLastCall;
4039
import static org.junit.Assert.*;
41-
40+
import static org.mockito.ArgumentMatchers.any;
41+
import static org.mockito.ArgumentMatchers.anyInt;
42+
import static org.mockito.BDDMockito.then;
43+
import static org.mockito.Mockito.atLeastOnce;
4244

4345
/**
4446
*
4547
*/
48+
@RunWith(MockitoJUnitRunner.class)
4649
public class ConsoleAppenderTest {
4750

4851
private static final String LOG4J_SKIP_JANSI = "log4j.skipJansi";
@@ -59,15 +62,12 @@ public static void beforeClass() {
5962

6063
ByteArrayOutputStream baos;
6164

62-
EasyMockSupport mocks;
63-
65+
@Mock
6466
PrintStream psMock;
6567

6668
@Before
6769
public void before() {
6870
System.setProperty(LOG4J_SKIP_JANSI, "true");
69-
mocks = new EasyMockSupport();
70-
psMock = mocks.createMock("psMock", PrintStream.class);
7171
baos = new ByteArrayOutputStream();
7272
}
7373

@@ -90,12 +90,6 @@ void systemSet(final PrintStream printStream) {
9090

9191
private void testConsoleStreamManagerDoesNotClose(final PrintStream ps, final Target targetName, final SystemSetter systemSetter) {
9292
try {
93-
psMock.write((byte[]) anyObject(), anyInt(), anyInt());
94-
expectLastCall().anyTimes();
95-
psMock.flush();
96-
expectLastCall().anyTimes();
97-
98-
mocks.replayAll();
9993
systemSetter.systemSet(psMock);
10094
final Layout<String> layout = PatternLayout.newBuilder().withAlwaysWriteExceptions(true).build();
10195
final ConsoleAppender app = ConsoleAppender.newBuilder().withLayout(layout).setTarget(targetName)
@@ -116,7 +110,8 @@ private void testConsoleStreamManagerDoesNotClose(final PrintStream ps, final Ta
116110
} finally {
117111
systemSetter.systemSet(ps);
118112
}
119-
mocks.verifyAll();
113+
then(psMock).should(atLeastOnce()).write(any(byte[].class), anyInt(), anyInt());
114+
then(psMock).should(atLeastOnce()).flush();
120115
}
121116

122117
@Test

log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java

Lines changed: 50 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -16,138 +16,94 @@
1616
*/
1717
package org.apache.logging.log4j.core.appender.db;
1818

19+
import java.util.concurrent.TimeUnit;
20+
1921
import org.apache.logging.log4j.core.Filter;
2022
import org.apache.logging.log4j.core.LogEvent;
21-
import org.junit.After;
2223
import org.junit.Test;
23-
24-
import static org.easymock.EasyMock.*;
24+
import org.junit.runner.RunWith;
25+
import org.mockito.Mock;
26+
import org.mockito.runners.MockitoJUnitRunner;
2527

2628
import static org.junit.Assert.*;
29+
import static org.mockito.ArgumentMatchers.same;
30+
import static org.mockito.BDDMockito.given;
31+
import static org.mockito.BDDMockito.then;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.reset;
2734

35+
@RunWith(MockitoJUnitRunner.class)
2836
public class AbstractDatabaseAppenderTest {
2937
private LocalAbstractDatabaseAppender appender;
38+
@Mock
3039
private LocalAbstractDatabaseManager manager;
3140

3241
public void setUp(final String name) {
33-
this.manager = createMockBuilder(LocalAbstractDatabaseManager.class)
34-
.withConstructor(String.class, int.class)
35-
.withArgs(name, 0)
36-
.addMockedMethod("close")
37-
.createStrictMock();
38-
39-
this.appender = createMockBuilder(LocalAbstractDatabaseAppender.class)
40-
.withConstructor(String.class, Filter.class, boolean.class, LocalAbstractDatabaseManager.class)
41-
.withArgs(name, null, true, this.manager)
42-
.createStrictMock();
43-
}
44-
45-
@After
46-
public void tearDown() {
47-
verify(this.manager, this.appender);
42+
appender = new LocalAbstractDatabaseAppender(name, null, true, manager);
4843
}
4944

5045
@Test
5146
public void testNameAndGetLayout01() {
52-
this.setUp("testName01");
47+
setUp("testName01");
5348

54-
replay(this.manager, this.appender);
55-
56-
assertEquals("The name is not correct.", "testName01", this.appender.getName());
57-
assertNull("The layout should always be null.", this.appender.getLayout());
49+
assertEquals("The name is not correct.", "testName01", appender.getName());
50+
assertNull("The layout should always be null.", appender.getLayout());
5851
}
5952

6053
@Test
6154
public void testNameAndGetLayout02() {
62-
this.setUp("anotherName02");
63-
64-
replay(this.manager, this.appender);
55+
setUp("anotherName02");
6556

66-
assertEquals("The name is not correct.", "anotherName02", this.appender.getName());
67-
assertNull("The layout should always be null.", this.appender.getLayout());
57+
assertEquals("The name is not correct.", "anotherName02", appender.getName());
58+
assertNull("The layout should always be null.", appender.getLayout());
6859
}
6960

7061
@Test
7162
public void testStartAndStop() throws Exception {
72-
this.setUp("name");
73-
74-
this.manager.startupInternal();
75-
expectLastCall();
76-
replay(this.manager, this.appender);
77-
78-
this.appender.start();
63+
setUp("name");
7964

80-
verify(this.manager, this.appender);
81-
reset(this.manager, this.appender);
82-
this.manager.shutdownInternal();
83-
expectLastCall().andReturn(Boolean.TRUE);
84-
replay(this.manager, this.appender);
65+
appender.start();
66+
then(manager).should().startupInternal();
8567

86-
this.appender.stop();
68+
appender.stop();
69+
then(manager).should().stop(0L, TimeUnit.MILLISECONDS);
8770
}
8871

8972
@Test
9073
public void testReplaceManager() throws Exception {
91-
this.setUp("name");
74+
setUp("name");
9275

93-
replay(this.manager, this.appender);
76+
final LocalAbstractDatabaseManager oldManager = appender.getManager();
77+
assertSame("The manager should be the same.", manager, oldManager);
9478

95-
final LocalAbstractDatabaseManager manager = this.appender.getManager();
79+
final LocalAbstractDatabaseManager newManager = mock(LocalAbstractDatabaseManager.class);
80+
appender.replaceManager(newManager);
81+
then(manager).should().close();
82+
then(newManager).should().startupInternal();
9683

97-
assertSame("The manager should be the same.", this.manager, manager);
84+
appender.stop();
85+
then(newManager).should().stop(0L, TimeUnit.MILLISECONDS);
86+
}
9887

99-
verify(this.manager, this.appender);
100-
reset(this.manager, this.appender);
101-
this.manager.close();
102-
expectLastCall();
103-
final LocalAbstractDatabaseManager newManager = createMockBuilder(LocalAbstractDatabaseManager.class)
104-
.withConstructor(String.class, int.class).withArgs("name", 0).addMockedMethod("close")
105-
.createStrictMock();
106-
newManager.startupInternal();
107-
expectLastCall();
108-
replay(this.manager, this.appender, newManager);
88+
@Test
89+
public void testAppend() {
90+
setUp("name");
91+
given(manager.commitAndClose()).willReturn(true);
10992

110-
this.appender.replaceManager(newManager);
93+
final LogEvent event1 = mock(LogEvent.class);
94+
final LogEvent event2 = mock(LogEvent.class);
11195

112-
verify(this.manager, this.appender, newManager);
113-
reset(this.manager, this.appender, newManager);
114-
newManager.shutdownInternal();
115-
expectLastCall().andReturn(Boolean.TRUE);
116-
replay(this.manager, this.appender, newManager);
96+
appender.append(event1);
97+
then(manager).should().connectAndStart();
98+
then(manager).should().writeInternal(same(event1));
99+
then(manager).should().commitAndClose();
117100

118-
this.appender.stop();
101+
reset(manager);
119102

120-
verify(newManager);
121-
}
122-
123-
@Test
124-
public void testAppend() {
125-
this.setUp("name");
126-
127-
final LogEvent event1 = createStrictMock(LogEvent.class);
128-
final LogEvent event2 = createStrictMock(LogEvent.class);
129-
130-
this.manager.connectAndStart();
131-
expectLastCall();
132-
this.manager.writeInternal(same(event1));
133-
expectLastCall();
134-
this.manager.commitAndClose();
135-
expectLastCall().andReturn(Boolean.TRUE);
136-
replay(this.manager, this.appender);
137-
138-
this.appender.append(event1);
139-
140-
verify(this.manager, this.appender);
141-
reset(this.manager, this.appender);
142-
this.manager.connectAndStart();
143-
expectLastCall();
144-
this.manager.writeInternal(same(event2));
145-
expectLastCall();
146-
this.manager.commitAndClose();
147-
expectLastCall().andReturn(Boolean.TRUE);
148-
replay(this.manager, this.appender);
149-
150-
this.appender.append(event2);
103+
appender.append(event2);
104+
then(manager).should().connectAndStart();
105+
then(manager).should().writeInternal(same(event2));
106+
then(manager).should().commitAndClose();
151107
}
152108

153109
private static abstract class LocalAbstractDatabaseManager extends AbstractDatabaseManager {
@@ -156,8 +112,7 @@ public LocalAbstractDatabaseManager(final String name, final int bufferSize) {
156112
}
157113
}
158114

159-
private static abstract class LocalAbstractDatabaseAppender extends
160-
AbstractDatabaseAppender<LocalAbstractDatabaseManager> {
115+
private static class LocalAbstractDatabaseAppender extends AbstractDatabaseAppender<LocalAbstractDatabaseManager> {
161116

162117
public LocalAbstractDatabaseAppender(final String name, final Filter filter, final boolean exceptionSuppressed,
163118
final LocalAbstractDatabaseManager manager) {

0 commit comments

Comments
 (0)