You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/10/24 08:16:57 UTC

[5/8] logging-log4j2 git commit: Migrate unit tests to Mockito 2.x

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.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/78c6a1fc
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/78c6a1fc
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/78c6a1fc

Branch: refs/heads/LOG4J2-1645
Commit: 78c6a1fcae718f5edd177256ab157f555b84f37a
Parents: f3e9ea1
Author: Matt Sicker <bo...@gmail.com>
Authored: Sun Oct 23 15:09:35 2016 -0500
Committer: Matt Sicker <bo...@gmail.com>
Committed: Sun Oct 23 15:12:03 2016 -0500

----------------------------------------------------------------------
 log4j-core/pom.xml                              |   4 +-
 .../core/appender/ConsoleAppenderTest.java      |  27 +-
 .../db/AbstractDatabaseAppenderTest.java        | 145 +++----
 .../db/AbstractDatabaseManagerTest.java         | 356 +++++++--------
 .../db/jdbc/AbstractJdbcAppenderTest.java       |  20 +-
 .../db/jdbc/DataSourceConnectionSourceTest.java |  17 +-
 .../jdbc/FactoryMethodConnectionSourceTest.java |  53 +--
 .../log4j/core/lookup/Log4jLookupTest.java      |  33 +-
 .../core/lookup/Log4jLookupWithSpacesTest.java  |  35 +-
 log4j-iostreams/pom.xml                         |   4 +-
 .../io/AbstractLoggerOutputStreamTest.java      |  15 +-
 .../log4j/io/AbstractLoggerWriterTest.java      |  15 +-
 log4j-nosql/pom.xml                             |   5 +-
 .../log4j/nosql/appender/NoSqlAppenderTest.java |  30 +-
 .../appender/NoSqlDatabaseManagerTest.java      | 434 ++++++-------------
 log4j-web/pom.xml                               |   4 +-
 .../Log4jServletContainerInitializerTest.java   | 164 +++----
 .../web/Log4jServletContextListenerTest.java    |  58 +--
 .../log4j/web/Log4jServletFilterTest.java       | 114 ++---
 .../log4j/web/Log4jWebInitializerImplTest.java  | 367 ++++------------
 pom.xml                                         |   7 +-
 src/changes/changes.xml                         |   3 +
 22 files changed, 658 insertions(+), 1252 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml
index 2fbc78c..5cda105 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core/pom.xml
@@ -203,8 +203,8 @@
     </dependency>
     <!-- Mocking framework for use with JUnit -->
     <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
     <!-- Embedded JDBC drivers for database appender tests -->

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 87aef83..c53eb43 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -27,22 +27,25 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.util.Strings;
-import org.easymock.EasyMockSupport;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
-import static org.easymock.EasyMock.anyInt;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expectLastCall;
 import static org.junit.Assert.*;
-
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.atLeastOnce;
 
 /**
  *
  */
+@RunWith(MockitoJUnitRunner.class)
 public class ConsoleAppenderTest {
 
     private static final String LOG4J_SKIP_JANSI = "log4j.skipJansi";
@@ -59,15 +62,12 @@ public class ConsoleAppenderTest {
 
     ByteArrayOutputStream baos;
 
-    EasyMockSupport mocks;
-
+    @Mock
     PrintStream psMock;
 
     @Before
     public void before() {
         System.setProperty(LOG4J_SKIP_JANSI, "true");
-        mocks = new EasyMockSupport();
-        psMock = mocks.createMock("psMock", PrintStream.class);
         baos = new ByteArrayOutputStream();
     }
 
@@ -90,12 +90,6 @@ public class ConsoleAppenderTest {
 
     private void testConsoleStreamManagerDoesNotClose(final PrintStream ps, final Target targetName, final SystemSetter systemSetter) {
         try {
-            psMock.write((byte[]) anyObject(), anyInt(), anyInt());
-            expectLastCall().anyTimes();
-            psMock.flush();
-            expectLastCall().anyTimes();
-
-            mocks.replayAll();
             systemSetter.systemSet(psMock);
             final Layout<String> layout = PatternLayout.newBuilder().withAlwaysWriteExceptions(true).build();
             final ConsoleAppender app = ConsoleAppender.newBuilder().withLayout(layout).setTarget(targetName)
@@ -116,7 +110,8 @@ public class ConsoleAppenderTest {
         } finally {
             systemSetter.systemSet(ps);
         }
-        mocks.verifyAll();
+        then(psMock).should(atLeastOnce()).write(any(byte[].class), anyInt(), anyInt());
+        then(psMock).should(atLeastOnce()).flush();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
index 276930c..cf33cea 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java
@@ -16,138 +16,94 @@
  */
 package org.apache.logging.log4j.core.appender.db;
 
+import java.util.concurrent.TimeUnit;
+
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
-import org.junit.After;
 import org.junit.Test;
-
-import static org.easymock.EasyMock.*;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
 import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 
+@RunWith(MockitoJUnitRunner.class)
 public class AbstractDatabaseAppenderTest {
     private LocalAbstractDatabaseAppender appender;
+    @Mock
     private LocalAbstractDatabaseManager manager;
 
     public void setUp(final String name) {
-        this.manager = createMockBuilder(LocalAbstractDatabaseManager.class)
-                .withConstructor(String.class, int.class)
-                .withArgs(name, 0)
-                .addMockedMethod("close")
-                .createStrictMock();
-
-        this.appender = createMockBuilder(LocalAbstractDatabaseAppender.class)
-                .withConstructor(String.class, Filter.class, boolean.class, LocalAbstractDatabaseManager.class)
-                .withArgs(name, null, true, this.manager)
-                .createStrictMock();
-    }
-
-    @After
-    public void tearDown() {
-        verify(this.manager, this.appender);
+        appender = new LocalAbstractDatabaseAppender(name, null, true, manager);
     }
 
     @Test
     public void testNameAndGetLayout01() {
-        this.setUp("testName01");
+        setUp("testName01");
 
-        replay(this.manager, this.appender);
-
-        assertEquals("The name is not correct.", "testName01", this.appender.getName());
-        assertNull("The layout should always be null.", this.appender.getLayout());
+        assertEquals("The name is not correct.", "testName01", appender.getName());
+        assertNull("The layout should always be null.", appender.getLayout());
     }
 
     @Test
     public void testNameAndGetLayout02() {
-        this.setUp("anotherName02");
-
-        replay(this.manager, this.appender);
+        setUp("anotherName02");
 
-        assertEquals("The name is not correct.", "anotherName02", this.appender.getName());
-        assertNull("The layout should always be null.", this.appender.getLayout());
+        assertEquals("The name is not correct.", "anotherName02", appender.getName());
+        assertNull("The layout should always be null.", appender.getLayout());
     }
 
     @Test
     public void testStartAndStop() throws Exception {
-        this.setUp("name");
-
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager, this.appender);
-
-        this.appender.start();
+        setUp("name");
 
-        verify(this.manager, this.appender);
-        reset(this.manager, this.appender);
-        this.manager.shutdownInternal();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager, this.appender);
+        appender.start();
+        then(manager).should().startupInternal();
 
-        this.appender.stop();
+        appender.stop();
+        then(manager).should().stop(0L, TimeUnit.MILLISECONDS);
     }
 
     @Test
     public void testReplaceManager() throws Exception {
-        this.setUp("name");
+        setUp("name");
 
-        replay(this.manager, this.appender);
+        final LocalAbstractDatabaseManager oldManager = appender.getManager();
+        assertSame("The manager should be the same.", manager, oldManager);
 
-        final LocalAbstractDatabaseManager manager = this.appender.getManager();
+        final LocalAbstractDatabaseManager newManager = mock(LocalAbstractDatabaseManager.class);
+        appender.replaceManager(newManager);
+        then(manager).should().close();
+        then(newManager).should().startupInternal();
 
-        assertSame("The manager should be the same.", this.manager, manager);
+        appender.stop();
+        then(newManager).should().stop(0L, TimeUnit.MILLISECONDS);
+    }
 
-        verify(this.manager, this.appender);
-        reset(this.manager, this.appender);
-        this.manager.close();
-        expectLastCall();
-        final LocalAbstractDatabaseManager newManager = createMockBuilder(LocalAbstractDatabaseManager.class)
-                .withConstructor(String.class, int.class).withArgs("name", 0).addMockedMethod("close")
-                .createStrictMock();
-        newManager.startupInternal();
-        expectLastCall();
-        replay(this.manager, this.appender, newManager);
+    @Test
+    public void testAppend() {
+        setUp("name");
+        given(manager.commitAndClose()).willReturn(true);
 
-        this.appender.replaceManager(newManager);
+        final LogEvent event1 = mock(LogEvent.class);
+        final LogEvent event2 = mock(LogEvent.class);
 
-        verify(this.manager, this.appender, newManager);
-        reset(this.manager, this.appender, newManager);
-        newManager.shutdownInternal();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager, this.appender, newManager);
+        appender.append(event1);
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event1));
+        then(manager).should().commitAndClose();
 
-        this.appender.stop();
+        reset(manager);
 
-        verify(newManager);
-    }
-
-    @Test
-    public void testAppend() {
-        this.setUp("name");
-
-        final LogEvent event1 = createStrictMock(LogEvent.class);
-        final LogEvent event2 = createStrictMock(LogEvent.class);
-
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event1));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager, this.appender);
-
-        this.appender.append(event1);
-
-        verify(this.manager, this.appender);
-        reset(this.manager, this.appender);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event2));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager, this.appender);
-
-        this.appender.append(event2);
+        appender.append(event2);
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event2));
+        then(manager).should().commitAndClose();
     }
 
     private static abstract class LocalAbstractDatabaseManager extends AbstractDatabaseManager {
@@ -156,8 +112,7 @@ public class AbstractDatabaseAppenderTest {
         }
     }
 
-    private static abstract class LocalAbstractDatabaseAppender extends
-            AbstractDatabaseAppender<LocalAbstractDatabaseManager> {
+    private static class LocalAbstractDatabaseAppender extends AbstractDatabaseAppender<LocalAbstractDatabaseManager> {
 
         public LocalAbstractDatabaseAppender(final String name, final Filter filter, final boolean exceptionSuppressed,
                                              final LocalAbstractDatabaseManager manager) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManagerTest.java
index 3a8ae8f..04d7699 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseManagerTest.java
@@ -17,261 +17,201 @@
 package org.apache.logging.log4j.core.appender.db;
 
 import org.apache.logging.log4j.core.LogEvent;
-import org.junit.After;
 import org.junit.Test;
 
-import static org.easymock.EasyMock.*;
-
 import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
 
 public class AbstractDatabaseManagerTest {
     private AbstractDatabaseManager manager;
 
     public void setUp(final String name, final int buffer) {
-        this.manager = createMockBuilder(AbstractDatabaseManager.class)
-                .withConstructor(String.class, int.class)
-                .withArgs(name, buffer)
-                .addMockedMethod("release")
-                .createStrictMock();
-    }
-
-    @After
-    public void tearDown() {
-        verify(this.manager);
+        manager = spy(new StubDatabaseManager(name, buffer));
     }
 
     @Test
     public void testStartupShutdown01() throws Exception {
-        this.setUp("testName01", 0);
-
-        replay(this.manager);
-
-        assertEquals("The name is not correct.", "testName01", this.manager.getName());
-        assertFalse("The manager should not have started.", this.manager.isRunning());
+        setUp("testName01", 0);
 
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
+        assertEquals("The name is not correct.", "testName01", manager.getName());
+        assertFalse("The manager should not have started.", manager.isRunning());
 
-        this.manager.startup();
-        assertTrue("The manager should be running now.", this.manager.isRunning());
+        manager.startup();
+        then(manager).should().startupInternal();
+        assertTrue("The manager should be running now.", manager.isRunning());
 
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.shutdownInternal();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.shutdown();
-        assertFalse("The manager should not be running anymore.", this.manager.isRunning());
+        manager.shutdown();
+        then(manager).should().shutdownInternal();
+        assertFalse("The manager should not be running anymore.", manager.isRunning());
     }
 
     @Test
     public void testStartupShutdown02() throws Exception {
-        this.setUp("anotherName02", 0);
-
-        replay(this.manager);
-
-        assertEquals("The name is not correct.", "anotherName02", this.manager.getName());
-        assertFalse("The manager should not have started.", this.manager.isRunning());
+        setUp("anotherName02", 0);
 
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
+        assertEquals("The name is not correct.", "anotherName02", manager.getName());
+        assertFalse("The manager should not have started.", manager.isRunning());
 
-        this.manager.startup();
-        assertTrue("The manager should be running now.", this.manager.isRunning());
+        manager.startup();
+        then(manager).should().startupInternal();
+        assertTrue("The manager should be running now.", manager.isRunning());
 
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.shutdownInternal();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.releaseSub(-1, null);
-        assertFalse("The manager should not be running anymore.", this.manager.isRunning());
+        manager.releaseSub(-1, null);
+        then(manager).should().shutdownInternal();
+        assertFalse("The manager should not be running anymore.", manager.isRunning());
     }
 
     @Test
     public void testToString01() {
-        this.setUp("someName01", 0);
-
-        replay(this.manager);
+        setUp("someName01", 0);
 
-        assertEquals("The string is not correct.", "someName01", this.manager.toString());
+        assertEquals("The string is not correct.", "someName01", manager.toString());
     }
 
     @Test
     public void testToString02() {
-        this.setUp("bufferSize=12, anotherKey02=coolValue02", 12);
+        setUp("bufferSize=12, anotherKey02=coolValue02", 12);
 
-        replay(this.manager);
-
-        assertEquals("The string is not correct.", "bufferSize=12, anotherKey02=coolValue02", this.manager.toString());
+        assertEquals("The string is not correct.", "bufferSize=12, anotherKey02=coolValue02", manager.toString());
     }
 
     @Test
     public void testBuffering01() throws Exception {
-        this.setUp("name", 0);
-
-        final LogEvent event1 = createStrictMock(LogEvent.class);
-        final LogEvent event2 = createStrictMock(LogEvent.class);
-        final LogEvent event3 = createStrictMock(LogEvent.class);
-
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
-
-        this.manager.startup();
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event1));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.write(event1);
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event2));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.write(event2);
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event3));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.write(event3);
+        setUp("name", 0);
+
+        final LogEvent event1 = mock(LogEvent.class);
+        final LogEvent event2 = mock(LogEvent.class);
+        final LogEvent event3 = mock(LogEvent.class);
+
+        manager.startup();
+        then(manager).should().startupInternal();
+        reset(manager);
+
+        manager.write(event1);
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event1));
+        then(manager).should().commitAndClose();
+        reset(manager);
+
+        manager.write(event2);
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event2));
+        then(manager).should().commitAndClose();
+        reset(manager);
+
+        manager.write(event3);
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event3));
+        then(manager).should().commitAndClose();
+        then(manager).shouldHaveNoMoreInteractions();
     }
 
     @Test
     public void testBuffering02() throws Exception {
-        this.setUp("name", 4);
-
-        final LogEvent event1 = createStrictMock(LogEvent.class);
-        final LogEvent event2 = createStrictMock(LogEvent.class);
-        final LogEvent event3 = createStrictMock(LogEvent.class);
-        final LogEvent event4 = createStrictMock(LogEvent.class);
-
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
-
-        this.manager.startup();
-
-        this.manager.write(event1);
-        this.manager.write(event2);
-        this.manager.write(event3);
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event1));
-        expectLastCall();
-        this.manager.writeInternal(same(event2));
-        expectLastCall();
-        this.manager.writeInternal(same(event3));
-        expectLastCall();
-        this.manager.writeInternal(same(event4));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.write(event4);
+        setUp("name", 4);
+
+        final LogEvent event1 = mock(LogEvent.class);
+        final LogEvent event2 = mock(LogEvent.class);
+        final LogEvent event3 = mock(LogEvent.class);
+        final LogEvent event4 = mock(LogEvent.class);
+
+        manager.startup();
+        then(manager).should().startupInternal();
+
+        manager.write(event1);
+        manager.write(event2);
+        manager.write(event3);
+        manager.write(event4);
+
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event1));
+        then(manager).should().writeInternal(same(event2));
+        then(manager).should().writeInternal(same(event3));
+        then(manager).should().writeInternal(same(event4));
+        then(manager).should().commitAndClose();
+        then(manager).shouldHaveNoMoreInteractions();
     }
 
     @Test
     public void testBuffering03() throws Exception {
-        this.setUp("name", 10);
-
-        final LogEvent event1 = createStrictMock(LogEvent.class);
-        final LogEvent event2 = createStrictMock(LogEvent.class);
-        final LogEvent event3 = createStrictMock(LogEvent.class);
-
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
-
-        this.manager.startup();
-
-        this.manager.write(event1);
-        this.manager.write(event2);
-        this.manager.write(event3);
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event1));
-        expectLastCall();
-        this.manager.writeInternal(same(event2));
-        expectLastCall();
-        this.manager.writeInternal(same(event3));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.flush();
+        setUp("name", 10);
+
+        final LogEvent event1 = mock(LogEvent.class);
+        final LogEvent event2 = mock(LogEvent.class);
+        final LogEvent event3 = mock(LogEvent.class);
+
+        manager.startup();
+        then(manager).should().startupInternal();
+
+        manager.write(event1);
+        manager.write(event2);
+        manager.write(event3);
+        manager.flush();
+
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event1));
+        then(manager).should().writeInternal(same(event2));
+        then(manager).should().writeInternal(same(event3));
+        then(manager).should().commitAndClose();
+        then(manager).shouldHaveNoMoreInteractions();
     }
 
     @Test
     public void testBuffering04() throws Exception {
-        this.setUp("name", 10);
-
-        final LogEvent event1 = createStrictMock(LogEvent.class);
-        final LogEvent event2 = createStrictMock(LogEvent.class);
-        final LogEvent event3 = createStrictMock(LogEvent.class);
-
-        this.manager.startupInternal();
-        expectLastCall();
-        replay(this.manager);
-
-        this.manager.startup();
-
-        this.manager.write(event1);
-        this.manager.write(event2);
-        this.manager.write(event3);
-
-        verify(this.manager);
-        reset(this.manager);
-        this.manager.connectAndStart();
-        expectLastCall();
-        this.manager.writeInternal(same(event1));
-        expectLastCall();
-        this.manager.writeInternal(same(event2));
-        expectLastCall();
-        this.manager.writeInternal(same(event3));
-        expectLastCall();
-        this.manager.commitAndClose();
-        expectLastCall().andReturn(Boolean.TRUE);
-        this.manager.shutdownInternal();
-        expectLastCall().andReturn(Boolean.TRUE);
-        replay(this.manager);
-
-        this.manager.shutdown();
+        setUp("name", 10);
+
+        final LogEvent event1 = mock(LogEvent.class);
+        final LogEvent event2 = mock(LogEvent.class);
+        final LogEvent event3 = mock(LogEvent.class);
+
+        manager.startup();
+        then(manager).should().startupInternal();
+
+        manager.write(event1);
+        manager.write(event2);
+        manager.write(event3);
+        manager.shutdown();
+
+        then(manager).should().connectAndStart();
+        then(manager).should().writeInternal(same(event1));
+        then(manager).should().writeInternal(same(event2));
+        then(manager).should().writeInternal(same(event3));
+        then(manager).should().commitAndClose();
+        then(manager).should().shutdownInternal();
+        then(manager).shouldHaveNoMoreInteractions();
+    }
+
+    // this stub is provided because mocking constructors is hard
+    private static class StubDatabaseManager extends AbstractDatabaseManager {
+
+        protected StubDatabaseManager(final String name, final int bufferSize) {
+            super(name, bufferSize);
+        }
+
+        @Override
+        protected void startupInternal() throws Exception {
+        }
+
+        @Override
+        protected boolean shutdownInternal() throws Exception {
+            return true;
+        }
+
+        @Override
+        protected void connectAndStart() {
+        }
+
+        @Override
+        protected void writeInternal(final LogEvent event) {
+        }
+
+        @Override
+        protected boolean commitAndClose() {
+            return true;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
index 881eab9..99c229d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/AbstractJdbcAppenderTest.java
@@ -22,7 +22,6 @@ import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-
 import javax.naming.InitialContext;
 import javax.sql.DataSource;
 
@@ -34,15 +33,16 @@ import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.config.DefaultConfiguration;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Strings;
-import org.easymock.IAnswer;
 import org.h2.util.IOUtils;
 import org.junit.After;
 import org.junit.Test;
 import org.mockejb.jndi.MockContextFactory;
-
-import static org.easymock.EasyMock.*;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
 
 public abstract class AbstractJdbcAppenderTest {
     private final String databaseType;
@@ -93,15 +93,13 @@ public abstract class AbstractJdbcAppenderTest {
 
     @Test
     public void testDataSourceConfig() throws Exception {
-        final DataSource dataSource = createStrictMock(DataSource.class);
-
-        expect(dataSource.getConnection()).andAnswer(new IAnswer<Connection>() {
+        final DataSource dataSource = mock(DataSource.class);
+        given(dataSource.getConnection()).willAnswer(new Answer<Connection>() {
             @Override
-            public Connection answer() throws Throwable {
+            public Connection answer(final InvocationOnMock invocation) throws Throwable {
                 return newConnection();
             }
-        }).atLeastOnce();
-        replay(dataSource);
+        });
 
         MockContextFactory.setAsInitial();
 
@@ -147,8 +145,6 @@ public abstract class AbstractJdbcAppenderTest {
                     IOUtils.readStringAndClose(resultSet.getNClob("exception").getCharacterStream(), -1));
 
             assertFalse("There should not be two rows.", resultSet.next());
-
-            verify(dataSource);
         } finally {
             MockContextFactory.revertSetAsInitial();
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSourceTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSourceTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSourceTest.java
index 7da9cb5..65ff060 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSourceTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSourceTest.java
@@ -20,7 +20,6 @@ import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Collection;
-
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
@@ -37,9 +36,9 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.mockejb.jndi.MockContextFactory;
 
-import static org.easymock.EasyMock.*;
-
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
 
 @RunWith(Parameterized.class)
 public class DataSourceConnectionSourceTest {
@@ -112,13 +111,11 @@ public class DataSourceConnectionSourceTest {
 
     @Test
     public void testDataSource() throws NamingException, SQLException {
-        final DataSource dataSource = createStrictMock(DataSource.class);
-        final Connection connection1 = createStrictMock(Connection.class);
-        final Connection connection2 = createStrictMock(Connection.class);
+        final DataSource dataSource = mock(DataSource.class);
+        final Connection connection1 = mock(Connection.class);
+        final Connection connection2 = mock(Connection.class);
 
-        expect(dataSource.getConnection()).andReturn(connection1);
-        expect(dataSource.getConnection()).andReturn(connection2);
-        replay(dataSource, connection1, connection2);
+        given(dataSource.getConnection()).willReturn(connection1, connection2);
 
         this.context.bind(this.jndiURL, dataSource);
 
@@ -134,8 +131,6 @@ public class DataSourceConnectionSourceTest {
         source = DataSourceConnectionSource.createConnectionSource(jndiURL.substring(0, jndiURL.length() - 1));
 
         assertNull("The connection source should be null now.", source);
-
-        verify(dataSource, connection1, connection2);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSourceTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSourceTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSourceTest.java
index cb02543..e8a99b7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSourceTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSourceTest.java
@@ -18,46 +18,23 @@ package org.apache.logging.log4j.core.appender.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.SQLException;
-
 import javax.sql.DataSource;
 
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.junit.LoggerContextRule;
 import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Test;
 
-import static org.easymock.EasyMock.*;
-
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
 
 public class FactoryMethodConnectionSourceTest {
     private static ThreadLocal<Object> holder = new ThreadLocal<>();
     private static final String CONFIG = "log4j-fatalOnly.xml";
 
-    @BeforeClass
-    public static void beforeClass() {
-        System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
-        final LoggerContext ctx = LoggerContext.getContext();
-        ctx.reconfigure();
-        final StatusLogger logger = StatusLogger.getLogger();
-        logger.setLevel(Level.FATAL);
-    }
-
-    @AfterClass
-    public static void tearDownClass() {
-        holder.remove();
-        holder = null;
-    }
-
-    @Before
-    public void setUp() {
-
-    }
+    @ClassRule
+    public static LoggerContextRule ctx = new LoggerContextRule(CONFIG);
 
     @After
     public void tearDown() {
@@ -107,13 +84,11 @@ public class FactoryMethodConnectionSourceTest {
 
     @Test
     public void testDataSourceReturnType() throws SQLException {
-        final DataSource dataSource = createStrictMock(DataSource.class);
-        final Connection connection1 = createStrictMock(Connection.class);
-        final Connection connection2 = createStrictMock(Connection.class);
+        final DataSource dataSource = mock(DataSource.class);
+        final Connection connection1 = mock(Connection.class);
+        final Connection connection2 = mock(Connection.class);
 
-        expect(dataSource.getConnection()).andReturn(connection1);
-        expect(dataSource.getConnection()).andReturn(connection2);
-        replay(dataSource, connection1, connection2);
+        given(dataSource.getConnection()).willReturn(connection1, connection2);
 
         holder.set(dataSource);
 
@@ -126,15 +101,11 @@ public class FactoryMethodConnectionSourceTest {
                 + "] " + DataSourceFactory.class.getName() + ".factoryMethod02() }", source.toString());
         assertSame("The connection is not correct (1).", connection1, source.getConnection());
         assertSame("The connection is not correct (2).", connection2, source.getConnection());
-
-        verify(connection1, connection2);
     }
 
     @Test
     public void testConnectionReturnType() throws SQLException {
-        final Connection connection = createStrictMock(Connection.class);
-
-        replay(connection);
+        final Connection connection = mock(Connection.class);
 
         holder.set(connection);
 
@@ -147,8 +118,6 @@ public class FactoryMethodConnectionSourceTest {
                 + ConnectionFactory.class.getName() + ".anotherMethod03() }", source.toString());
         assertSame("The connection is not correct (1).", connection, source.getConnection());
         assertSame("The connection is not correct (2).", connection, source.getConnection());
-
-        verify(connection);
     }
 
     @SuppressWarnings("unused")

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupTest.java
index 3059a9a..0db5db0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupTest.java
@@ -23,48 +23,43 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationAware;
 import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.impl.ContextAnchor;
-import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
 import static org.apache.logging.log4j.core.lookup.Log4jLookup.KEY_CONFIG_LOCATION;
 import static org.apache.logging.log4j.core.lookup.Log4jLookup.KEY_CONFIG_PARENT_LOCATION;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.given;
 
 /**
  *
  */
+@RunWith(MockitoJUnitRunner.class)
 public class Log4jLookupTest {
 
     private final static File EXPECT = new File(System.getProperty("user.home"), "/a/b/c/d/e/log4j2.xml");
-    private LoggerContext mockCtx = null;
-    private Configuration config = null;
-    private ConfigurationSource configSrc = null;
+
+    @Mock
+    private LoggerContext mockCtx;
+    @Mock
+    private Configuration config;
+    @Mock
+    private ConfigurationSource configSrc;
 
     @Before
     public void setup() throws URISyntaxException {
-        this.mockCtx = EasyMock.createMock(LoggerContext.class);
         ContextAnchor.THREAD_CONTEXT.set(mockCtx);
-
-        this.config = EasyMock.createMock(Configuration.class);
-        
-        this.configSrc = EasyMock.createMock(ConfigurationSource.class);
-        expect(config.getConfigurationSource()).andReturn(configSrc);
-        expect(configSrc.getFile()).andReturn(EXPECT);
-
-        replay(mockCtx, config, configSrc);
+        given(config.getConfigurationSource()).willReturn(configSrc);
+        given(configSrc.getFile()).willReturn(EXPECT);
     }
 
     @After
     public void cleanup() {
-        verify(mockCtx, config, configSrc);
-
         ContextAnchor.THREAD_CONTEXT.set(null);
-        this.mockCtx = null;
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupWithSpacesTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupWithSpacesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupWithSpacesTest.java
index 7b88ad4..e5ecb49 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupWithSpacesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/Log4jLookupWithSpacesTest.java
@@ -24,47 +24,42 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationAware;
 import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.impl.ContextAnchor;
-import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
 
-import static org.apache.logging.log4j.core.lookup.Log4jLookup.*;
-
-import static org.easymock.EasyMock.*;
-
+import static org.apache.logging.log4j.core.lookup.Log4jLookup.KEY_CONFIG_LOCATION;
+import static org.apache.logging.log4j.core.lookup.Log4jLookup.KEY_CONFIG_PARENT_LOCATION;
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.given;
 
 /**
  *
  */
+@RunWith(MockitoJUnitRunner.class)
 public class Log4jLookupWithSpacesTest {
 
     private final static File EXPECT = new File(System.getProperty("user.home"), "/a a/b b/c c/d d/e e/log4j2 file.xml");
-    private LoggerContext mockCtx = null;
-    private Configuration config = null;
-    private ConfigurationSource configSrc = null;
+    @Mock
+    private LoggerContext mockCtx;
+    @Mock
+    private Configuration config;
+    @Mock
+    private ConfigurationSource configSrc;
 
     @Before
     public void setup() throws URISyntaxException, MalformedURLException {
-        this.mockCtx = EasyMock.createMock(LoggerContext.class);
         ContextAnchor.THREAD_CONTEXT.set(mockCtx);
-
-        this.config = EasyMock.createMock(Configuration.class);
-
-        this.configSrc = EasyMock.createMock(ConfigurationSource.class);
-        expect(config.getConfigurationSource()).andReturn(configSrc);
-        expect(configSrc.getFile()).andReturn(EXPECT);
-
-        replay(mockCtx, config, configSrc);
+        given(config.getConfigurationSource()).willReturn(configSrc);
+        given(configSrc.getFile()).willReturn(EXPECT);
     }
 
     @After
     public void cleanup() {
-        verify(mockCtx, config, configSrc);
-
         ContextAnchor.THREAD_CONTEXT.set(null);
-        this.mockCtx = null;
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-iostreams/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-iostreams/pom.xml b/log4j-iostreams/pom.xml
index c818aae..1ca56b4 100644
--- a/log4j-iostreams/pom.xml
+++ b/log4j-iostreams/pom.xml
@@ -63,8 +63,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerOutputStreamTest.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerOutputStreamTest.java b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerOutputStreamTest.java
index 2f4f573..188b422 100644
--- a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerOutputStreamTest.java
+++ b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerOutputStreamTest.java
@@ -20,13 +20,12 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.mock;
 
 public abstract class AbstractLoggerOutputStreamTest extends AbstractStreamTest {
     
@@ -63,10 +62,7 @@ public abstract class AbstractLoggerOutputStreamTest extends AbstractStreamTest
 
     @Test
     public void testFlush() throws IOException {
-        final OutputStream os = EasyMock.createMock("out", OutputStream.class);
-        os.flush(); // expect the flush to come through to the mocked OutputStream
-        os.close();
-        replay(os);
+        final OutputStream os = mock(OutputStream.class);
 
         try (final OutputStream filteredOut =
             IoBuilder.forLogger(getExtendedLogger())
@@ -75,7 +71,10 @@ public abstract class AbstractLoggerOutputStreamTest extends AbstractStreamTest
                 .buildOutputStream()) {
           filteredOut.flush();
         }
-        verify(os);
+
+        then(os).should().flush();
+        then(os).should().close();
+        then(os).shouldHaveNoMoreInteractions();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerWriterTest.java
----------------------------------------------------------------------
diff --git a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerWriterTest.java b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerWriterTest.java
index c40cdf6..7560546 100644
--- a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerWriterTest.java
+++ b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/AbstractLoggerWriterTest.java
@@ -21,13 +21,12 @@ import java.io.OutputStream;
 import java.io.StringWriter;
 import java.io.Writer;
 
-import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 import static org.junit.Assert.*;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.mock;
 
 public abstract class AbstractLoggerWriterTest extends AbstractStreamTest {
     protected StringWriter wrapped;
@@ -65,10 +64,7 @@ public abstract class AbstractLoggerWriterTest extends AbstractStreamTest {
 
     @Test
     public void testFlush() throws IOException {
-        final OutputStream out = EasyMock.createMock(OutputStream.class);
-        out.flush(); // expect the flush to come through to the mocked OutputStream
-        out.close();
-        replay(out);
+        final OutputStream out = mock(OutputStream.class);
 
         try (final OutputStream filteredOut =
             IoBuilder.forLogger(getExtendedLogger())
@@ -77,7 +73,10 @@ public abstract class AbstractLoggerWriterTest extends AbstractStreamTest {
                 .buildOutputStream()) {
         	filteredOut.flush();
         }
-        verify(out);
+
+        then(out).should().flush();
+        then(out).should().close();
+        then(out).shouldHaveNoMoreInteractions();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-nosql/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-nosql/pom.xml b/log4j-nosql/pom.xml
index ccf44e9..0ec75f5 100644
--- a/log4j-nosql/pom.xml
+++ b/log4j-nosql/pom.xml
@@ -54,8 +54,9 @@
       <artifactId>junit</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlAppenderTest.java b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlAppenderTest.java
index c48cf0a..236218c 100644
--- a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlAppenderTest.java
+++ b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlAppenderTest.java
@@ -16,17 +16,19 @@
  */
 package org.apache.logging.log4j.nosql.appender;
 
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import static org.junit.Assert.*;
 
+@RunWith(MockitoJUnitRunner.class)
 public class NoSqlAppenderTest {
 
+    @Mock
+    private NoSqlProvider<?> provider;
+
     @Test
     public void testNoProvider() {
         final NoSqlAppender appender = NoSqlAppender.createAppender("myName01", null, null, null, null);
@@ -36,11 +38,6 @@ public class NoSqlAppenderTest {
 
     @Test
     public void testProvider() {
-        @SuppressWarnings("unchecked")
-        final NoSqlProvider<?> provider = createStrictMock(NoSqlProvider.class);
-
-        replay(provider);
-
         final NoSqlAppender appender = NoSqlAppender.createAppender("myName01", null, null, null, provider);
 
         assertNotNull("The appender should not be null.", appender);
@@ -49,17 +46,10 @@ public class NoSqlAppenderTest {
                 appender.toString());
 
         appender.stop();
-
-        verify(provider);
     }
 
     @Test
     public void testProviderBuffer() {
-        @SuppressWarnings("unchecked")
-        final NoSqlProvider<?> provider = createStrictMock(NoSqlProvider.class);
-
-        replay(provider);
-
         final NoSqlAppender appender = NoSqlAppender.createAppender("anotherName02", null, null, "25", provider);
 
         assertNotNull("The appender should not be null.", appender);
@@ -68,7 +58,5 @@ public class NoSqlAppenderTest {
                         + " } }", appender.toString());
 
         appender.stop();
-
-        verify(provider);
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
----------------------------------------------------------------------
diff --git a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
index 2f597b5..af55e2c 100644
--- a/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
+++ b/log4j-nosql/src/test/java/org/apache/logging/log4j/nosql/appender/NoSqlDatabaseManagerTest.java
@@ -16,23 +16,9 @@
  */
 package org.apache.logging.log4j.nosql.appender;
 
-import static org.easymock.EasyMock.anyInt;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.getCurrentArguments;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -43,173 +29,132 @@ import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.appender.AppenderLoggingException;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.junit.ThreadContextStackRule;
 import org.apache.logging.log4j.message.Message;
-import org.easymock.Capture;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.mock;
+
+@RunWith(MockitoJUnitRunner.class)
 public class NoSqlDatabaseManagerTest {
+    @Mock
     private NoSqlConnection<Map<String, Object>, DefaultNoSqlObject> connection;
+    @Mock
     private NoSqlProvider<NoSqlConnection<Map<String, Object>, DefaultNoSqlObject>> provider;
+    @Mock
+    private Message message;
+    @Captor
+    private ArgumentCaptor<NoSqlObject<Map<String, Object>>> captor;
 
     @Rule
-    public final ThreadContextStackRule threadContextRule = new ThreadContextStackRule(); 
+    public final ThreadContextStackRule threadContextRule = new ThreadContextStackRule();
+    @Rule
+    public final ExpectedException expectedException = ExpectedException.none();
 
     @Before
     public void setUp() {
-        this.provider = createStrictMock(NoSqlProvider.class);
-        this.connection = createStrictMock(NoSqlConnection.class);
-    }
-
-    @After
-    public void tearDown() {
-        verify(this.provider, this.connection);
+        given(provider.getConnection()).willReturn(connection);
+        given(connection.createObject()).willAnswer(new Answer<DefaultNoSqlObject>() {
+            @Override
+            public DefaultNoSqlObject answer(final InvocationOnMock invocation) throws Throwable {
+                return new DefaultNoSqlObject();
+            }
+        });
+        given(connection.createList(anyInt())).willAnswer(new Answer<DefaultNoSqlObject[]>() {
+            @Override
+            public DefaultNoSqlObject[] answer(final InvocationOnMock invocation) throws Throwable {
+                return new DefaultNoSqlObject[invocation.<Integer>getArgument(0)];
+            }
+        });
     }
 
     @Test
-	public void testConnection() {
-		replay(this.provider, this.connection);
-
-		try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
-				this.provider)) {
-
-			assertNotNull("The manager should not be null.", manager);
+    public void testConnection() {
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
 
-			verify(this.provider, this.connection);
-			reset(this.provider, this.connection);
-			expect(this.provider.getConnection()).andReturn(this.connection);
-			replay(this.provider, this.connection);
+            assertNotNull("The manager should not be null.", manager);
 
-			manager.connectAndStart();
-			manager.commitAndClose();
-		}
-	}
+            manager.connectAndStart();
+            then(provider).should().getConnection();
+            manager.commitAndClose();
+        }
+    }
 
     @Test
-	public void testWriteInternalNotConnected01() {
-		replay(this.provider, this.connection);
-
-		try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
-				this.provider)) {
-
-			verify(this.provider, this.connection);
-			reset(this.provider, this.connection);
-
-			final LogEvent event = createStrictMock(LogEvent.class);
-			replay(this.provider, this.connection, event);
-
-			try {
-				manager.writeInternal(event);
-				fail("Expected AppenderLoggingException.");
-			} catch (final AppenderLoggingException ignore) {
-				/* */
-			}
-
-			verify(event);
-		}
-	}
+    public void testWriteInternalNotConnected01() {
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
+            expectedException.expect(AppenderLoggingException.class);
+            manager.writeInternal(mock(LogEvent.class));
+        }
+    }
 
     @Test
     public void testWriteInternalNotConnected02() {
-        final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, this.provider);
+        given(connection.isClosed()).willReturn(true);
 
-        try {
-            replay(this.provider, this.connection);
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
 
             manager.startup();
-
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-            expect(this.provider.getConnection()).andReturn(this.connection);
-            replay(this.provider, this.connection);
-
             manager.connectAndStart();
+            then(provider).should().getConnection();
 
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-
-            final LogEvent event = createStrictMock(LogEvent.class);
-            expect(this.connection.isClosed()).andReturn(true);
-            replay(this.provider, this.connection, event);
-
-            try {
-                manager.writeInternal(event);
-                fail("Expected AppenderLoggingException.");
-            } catch (final AppenderLoggingException ignore) {
-                /* */
-            }
-        } finally {
-            try {
-                manager.close();
-            } catch (final Throwable ignore) {
-                /* */
-            }
+            expectedException.expect(AppenderLoggingException.class);
+            manager.writeInternal(mock(LogEvent.class));
         }
     }
 
     @Test
     public void testWriteInternal01() {
-        final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, this.provider);
+        given(connection.isClosed()).willReturn(false);
+        given(message.getFormattedMessage()).willReturn("My formatted message 01.");
 
-        try {
-            replay(this.provider, this.connection);
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
 
             manager.startup();
-
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-            expect(this.provider.getConnection()).andReturn(this.connection);
-            replay(this.provider, this.connection);
-
             manager.connectAndStart();
-
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-
-            final Capture<NoSqlObject<Map<String, Object>>> capture = EasyMock.newCapture();
-
-            final LogEvent event = createStrictMock(LogEvent.class);
-            final Message message = createStrictMock(Message.class);
-
-            expect(this.connection.isClosed()).andReturn(false);
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(event.getLevel()).andReturn(Level.WARN);
-            expect(event.getLoggerName()).andReturn("com.foo.NoSQLDbTest.testWriteInternal01");
-            expect(event.getMessage()).andReturn(message).times(2);
-            expect(message.getFormattedMessage()).andReturn("My formatted message 01.");
-            expect(event.getSource()).andReturn(new StackTraceElement("com.foo.Bar", "testMethod01", "Bar.java", 15));
-            expect(event.getMarker()).andReturn(null);
-            expect(event.getThreadId()).andReturn(1L);
-            expect(event.getThreadName()).andReturn("MyThread-A");
-            expect(event.getThreadPriority()).andReturn(1);
-            expect(event.getTimeMillis()).andReturn(1234567890123L).times(2);
-            expect(event.getThrown()).andReturn(null);
-            expect(event.getContextMap()).andReturn(null);
-            expect(event.getContextStack()).andReturn(null);
-            this.connection.insertObject(capture(capture));
-            expectLastCall();
-            replay(this.provider, this.connection, event, message);
+            then(provider).should().getConnection();
+
+            final LogEvent event = Log4jLogEvent.newBuilder()
+                .setLevel(Level.WARN)
+                .setLoggerName("com.foo.NoSQLDbTest.testWriteInternal01")
+                .setMessage(message)
+                .setSource(new StackTraceElement("com.foo.Bar", "testMethod01", "Bar.java", 15))
+                .setThreadId(1L)
+                .setThreadName("MyThread-A")
+                .setThreadPriority(1)
+                .setTimeMillis(1234567890123L)
+                .build();
 
             manager.writeInternal(event);
+            then(connection).should().insertObject(captor.capture());
 
-            final NoSqlObject<Map<String, Object>> inserted = capture.getValue();
+            final NoSqlObject<Map<String, Object>> inserted = captor.getValue();
             assertNotNull("The inserted value should not be null.", inserted);
             final Map<String, Object> object = inserted.unwrap();
             assertNotNull("The unwrapped object should not be null.", object);
 
             assertEquals("The level is not correct.", Level.WARN, object.get("level"));
             assertEquals("The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal01",
-                    object.get("loggerName"));
+                object.get("loggerName"));
             assertEquals("The message is not correct.", "My formatted message 01.", object.get("message"));
             assertEquals("The thread is not correct.", "MyThread-A", object.get("threadName"));
             assertEquals("The millis is not correct.", 1234567890123L, object.get("millis"));
@@ -227,99 +172,61 @@ public class NoSqlDatabaseManagerTest {
 
             assertNull("The thrown should be null.", object.get("thrown"));
 
-            assertNull("The context map should be null.", object.get("contextMap"));
+            assertTrue("The context map should be empty.", ((Map) object.get("contextMap")).isEmpty());
 
-            assertNull("The context stack should be null.", object.get("contextStack"));
+            assertTrue("The context stack should be null.", ((Collection) object.get("contextStack")).isEmpty());
 
-            verify(this.provider, this.connection, event, message);
-        } finally {
-            try {
-                manager.close();
-            } catch (final Throwable ignore) {
-                /* */
-            }
         }
     }
 
     @Test
     public void testWriteInternal02() {
-        final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, this.provider);
-
-        try {
-            replay(this.provider, this.connection);
+        given(connection.isClosed()).willReturn(false);
+        given(message.getFormattedMessage()).willReturn("Another cool message 02.");
 
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
             manager.startup();
 
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-            expect(this.provider.getConnection()).andReturn(this.connection);
-            replay(this.provider, this.connection);
-
             manager.connectAndStart();
-
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-
-            final Capture<NoSqlObject<Map<String, Object>>> capture = EasyMock.newCapture();
+            then(provider).should().getConnection();
 
             final RuntimeException exception = new RuntimeException("This is something cool!");
             final Map<String, String> context = new HashMap<>();
             context.put("hello", "world");
             context.put("user", "pass");
 
-            final LogEvent event = createStrictMock(LogEvent.class);
-            final Message message = createStrictMock(Message.class);
             ThreadContext.push("message1");
             ThreadContext.push("stack2");
             final ThreadContext.ContextStack stack = ThreadContext.getImmutableStack();
             ThreadContext.clearStack();
 
-            expect(this.connection.isClosed()).andReturn(false);
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(this.connection.createList(anyInt())).andAnswer(new IAnswer<DefaultNoSqlObject[]>() {
-                @Override
-                public DefaultNoSqlObject[] answer() throws Throwable {
-                    return new DefaultNoSqlObject[(Integer) getCurrentArguments()[0]];
-                }
-            });
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(event.getLevel()).andReturn(Level.DEBUG);
-            expect(event.getLoggerName()).andReturn("com.foo.NoSQLDbTest.testWriteInternal02");
-            expect(event.getMessage()).andReturn(message).times(2);
-            expect(message.getFormattedMessage()).andReturn("Another cool message 02.");
-            expect(event.getSource()).andReturn(new StackTraceElement("com.bar.Foo", "anotherMethod03", "Foo.java", 9));
-            expect(event.getMarker()).andReturn(MarkerManager.getMarker("LoneMarker"));
-            expect(event.getThreadId()).andReturn(1L);
-            expect(event.getThreadName()).andReturn("AnotherThread-B");
-            expect(event.getThreadPriority()).andReturn(1);
-            expect(event.getTimeMillis()).andReturn(987654321564L).times(2);
-            expect(event.getThrown()).andReturn(exception);
-            expect(event.getContextMap()).andReturn(context);
-            expect(event.getContextStack()).andReturn(stack);
-            this.connection.insertObject(capture(capture));
-            expectLastCall();
-            replay(this.provider, this.connection, event, message);
+            final LogEvent event = Log4jLogEvent.newBuilder()
+                .setLevel(Level.DEBUG)
+                .setLoggerName("com.foo.NoSQLDbTest.testWriteInternal02")
+                .setMessage(message)
+                .setSource(new StackTraceElement("com.bar.Foo", "anotherMethod03", "Foo.java", 9))
+                .setMarker(MarkerManager.getMarker("LoneMarker"))
+                .setThreadId(1L)
+                .setThreadName("AnotherThread-B")
+                .setThreadPriority(1)
+                .setTimeMillis(987654321564L)
+                .setThrown(exception)
+                .setContextMap(context)
+                .setContextStack(stack)
+                .build();
 
             manager.writeInternal(event);
+            then(connection).should().insertObject(captor.capture());
 
-            final NoSqlObject<Map<String, Object>> inserted = capture.getValue();
+            final NoSqlObject<Map<String, Object>> inserted = captor.getValue();
             assertNotNull("The inserted value should not be null.", inserted);
             final Map<String, Object> object = inserted.unwrap();
             assertNotNull("The unwrapped object should not be null.", object);
 
             assertEquals("The level is not correct.", Level.DEBUG, object.get("level"));
             assertEquals("The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal02",
-                    object.get("loggerName"));
+                object.get("loggerName"));
             assertEquals("The message is not correct.", "Another cool message 02.", object.get("message"));
             assertEquals("The thread is not correct.", "AnotherThread-B", object.get("threadName"));
             assertEquals("The millis is not correct.", 987654321564L, object.get("millis"));
@@ -348,17 +255,17 @@ public class NoSqlDatabaseManagerTest {
             @SuppressWarnings("unchecked")
             final List<Map<String, Object>> stackTrace = (List<Map<String, Object>>) thrown.get("stackTrace");
             assertEquals("The thrown stack trace length is not correct.", exception.getStackTrace().length,
-                    stackTrace.size());
+                stackTrace.size());
             for (int i = 0; i < exception.getStackTrace().length; i++) {
                 final StackTraceElement e1 = exception.getStackTrace()[i];
                 final Map<String, Object> e2 = stackTrace.get(i);
 
                 assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className"));
                 assertEquals("Element method name [" + i + "] is not correct.", e1.getMethodName(),
-                        e2.get("methodName"));
+                    e2.get("methodName"));
                 assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName"));
                 assertEquals("Element line number [" + i + "] is not correct.", e1.getLineNumber(),
-                        e2.get("lineNumber"));
+                    e2.get("lineNumber"));
             }
             assertNull("The thrown should have no cause.", thrown.get("cause"));
 
@@ -367,37 +274,20 @@ public class NoSqlDatabaseManagerTest {
 
             assertTrue("The context stack should be list.", object.get("contextStack") instanceof List);
             assertEquals("The context stack is not correct.", stack.asList(), object.get("contextStack"));
-
-            verify(this.provider, this.connection, event, message);
-        } finally {
-            try {
-                manager.close();
-            } catch (final Throwable ignore) {
-                /* */
-            }
         }
     }
 
     @Test
     public void testWriteInternal03() {
-        final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, this.provider);
-
-        try {
-            replay(this.provider, this.connection);
+        given(connection.isClosed()).willReturn(false);
+        given(message.getFormattedMessage()).willReturn("Another cool message 02.");
 
+        try (final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0,
+            provider)) {
             manager.startup();
 
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-            expect(this.provider.getConnection()).andReturn(this.connection);
-            replay(this.provider, this.connection);
-
             manager.connectAndStart();
-
-            verify(this.provider, this.connection);
-            reset(this.provider, this.connection);
-
-            final Capture<NoSqlObject<Map<String, Object>>> capture = EasyMock.newCapture();
+            then(provider).should().getConnection();
 
             final IOException exception1 = new IOException("This is the cause.");
             final SQLException exception2 = new SQLException("This is the result.", exception1);
@@ -405,73 +295,39 @@ public class NoSqlDatabaseManagerTest {
             context.put("hello", "world");
             context.put("user", "pass");
 
-            final LogEvent event = createStrictMock(LogEvent.class);
-            final Message message = createStrictMock(Message.class);
             ThreadContext.push("message1");
             ThreadContext.push("stack2");
             final ThreadContext.ContextStack stack = ThreadContext.getImmutableStack();
             ThreadContext.clearStack();
 
-            expect(this.connection.isClosed()).andReturn(false);
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(this.connection.createList(anyInt())).andAnswer(new IAnswer<DefaultNoSqlObject[]>() {
-                @Override
-                public DefaultNoSqlObject[] answer() throws Throwable {
-                    return new DefaultNoSqlObject[(Integer) getCurrentArguments()[0]];
-                }
-            });
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(this.connection.createList(anyInt())).andAnswer(new IAnswer<DefaultNoSqlObject[]>() {
-                @Override
-                public DefaultNoSqlObject[] answer() throws Throwable {
-                    return new DefaultNoSqlObject[(Integer) getCurrentArguments()[0]];
-                }
-            });
-            expect(this.connection.createObject()).andAnswer(new IAnswer<DefaultNoSqlObject>() {
-                @Override
-                public DefaultNoSqlObject answer() throws Throwable {
-                    return new DefaultNoSqlObject();
-                }
-            }).atLeastOnce();
-            expect(event.getLevel()).andReturn(Level.DEBUG);
-            expect(event.getLoggerName()).andReturn("com.foo.NoSQLDbTest.testWriteInternal02");
-            expect(event.getMessage()).andReturn(message).times(2);
-            expect(message.getFormattedMessage()).andReturn("Another cool message 02.");
-            expect(event.getSource()).andReturn(new StackTraceElement("com.bar.Foo", "anotherMethod03", "Foo.java", 9));
-            expect(event.getMarker()).andReturn(
-                    MarkerManager.getMarker("AnotherMarker").addParents(MarkerManager.getMarker("Parent1").addParents(MarkerManager.getMarker("GrandParent1")),
-                            MarkerManager.getMarker("Parent2")));
-            expect(event.getThreadId()).andReturn(1L);
-            expect(event.getThreadName()).andReturn("AnotherThread-B");
-            expect(event.getThreadPriority()).andReturn(1);
-            expect(event.getTimeMillis()).andReturn(987654321564L).times(2);
-            expect(event.getThrown()).andReturn(exception2);
-            expect(event.getContextMap()).andReturn(context);
-            expect(event.getContextStack()).andReturn(stack);
-            this.connection.insertObject(capture(capture));
-            expectLastCall();
-            replay(this.provider, this.connection, event, message);
+            final LogEvent event = Log4jLogEvent.newBuilder()
+                .setLevel(Level.DEBUG)
+                .setLoggerName("com.foo.NoSQLDbTest.testWriteInternal02")
+                .setMessage(message)
+                .setSource(new StackTraceElement("com.bar.Foo", "anotherMethod03", "Foo.java", 9))
+                .setMarker(MarkerManager.getMarker("AnotherMarker").addParents(
+                    MarkerManager.getMarker("Parent1").addParents(MarkerManager.getMarker("GrandParent1")),
+                    MarkerManager.getMarker("Parent2")))
+                .setThreadId(1L)
+                .setThreadName("AnotherThread-B")
+                .setThreadPriority(1)
+                .setTimeMillis(987654321564L)
+                .setThrown(exception2)
+                .setContextMap(context)
+                .setContextStack(stack)
+                .build();
 
             manager.writeInternal(event);
+            then(connection).should().insertObject(captor.capture());
 
-            final NoSqlObject<Map<String, Object>> inserted = capture.getValue();
+            final NoSqlObject<Map<String, Object>> inserted = captor.getValue();
             assertNotNull("The inserted value should not be null.", inserted);
             final Map<String, Object> object = inserted.unwrap();
             assertNotNull("The unwrapped object should not be null.", object);
 
             assertEquals("The level is not correct.", Level.DEBUG, object.get("level"));
             assertEquals("The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal02",
-                    object.get("loggerName"));
+                object.get("loggerName"));
             assertEquals("The message is not correct.", "Another cool message 02.", object.get("message"));
             assertEquals("The thread is not correct.", "AnotherThread-B", object.get("threadName"));
             assertEquals("The millis is not correct.", 987654321564L, object.get("millis"));
@@ -494,12 +350,12 @@ public class NoSqlDatabaseManagerTest {
             @SuppressWarnings("unchecked")
             final List<Object> markerParents = (List<Object>) marker.get("parents");
             assertEquals("The marker parents should contain two parents", 2, markerParents.size());
-            
+
             assertTrue("The marker parents[0] should be a map.", markerParents.get(0) instanceof Map);
             @SuppressWarnings("unchecked")
             final Map<String, Object> parent1 = (Map<String, Object>) markerParents.get(0);
             assertEquals("The first marker parent name is not correct.", "Parent1", parent1.get("name"));
-            
+
             assertTrue("The marker parents[1] should be a map.", markerParents.get(1) instanceof Map);
             @SuppressWarnings("unchecked")
             final Map<String, Object> parent2 = (Map<String, Object>) markerParents.get(1);
@@ -510,7 +366,7 @@ public class NoSqlDatabaseManagerTest {
             @SuppressWarnings("unchecked")
             final List<Object> parent1Parents = (List<Object>) parent1.get("parents");
             assertEquals("The parent1 parents should have only one parent", 1, parent1Parents.size());
-            
+
             assertTrue("The parent1Parents[0] should be a map.", parent1Parents.get(0) instanceof Map);
             @SuppressWarnings("unchecked")
             final Map<String, Object> parent1parent = (Map<String, Object>) parent1Parents.get(0);
@@ -526,17 +382,17 @@ public class NoSqlDatabaseManagerTest {
             @SuppressWarnings("unchecked")
             final List<Map<String, Object>> stackTrace = (List<Map<String, Object>>) thrown.get("stackTrace");
             assertEquals("The thrown stack trace length is not correct.", exception2.getStackTrace().length,
-                    stackTrace.size());
+                stackTrace.size());
             for (int i = 0; i < exception2.getStackTrace().length; i++) {
                 final StackTraceElement e1 = exception2.getStackTrace()[i];
                 final Map<String, Object> e2 = stackTrace.get(i);
 
                 assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className"));
                 assertEquals("Element method name [" + i + "] is not correct.", e1.getMethodName(),
-                        e2.get("methodName"));
+                    e2.get("methodName"));
                 assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName"));
                 assertEquals("Element line number [" + i + "] is not correct.", e1.getLineNumber(),
-                        e2.get("lineNumber"));
+                    e2.get("lineNumber"));
             }
             assertTrue("The thrown cause should be a map.", thrown.get("cause") instanceof Map);
             @SuppressWarnings("unchecked")
@@ -547,17 +403,17 @@ public class NoSqlDatabaseManagerTest {
             @SuppressWarnings("unchecked")
             final List<Map<String, Object>> causeStackTrace = (List<Map<String, Object>>) cause.get("stackTrace");
             assertEquals("The cause stack trace length is not correct.", exception1.getStackTrace().length,
-                    causeStackTrace.size());
+                causeStackTrace.size());
             for (int i = 0; i < exception1.getStackTrace().length; i++) {
                 final StackTraceElement e1 = exception1.getStackTrace()[i];
                 final Map<String, Object> e2 = causeStackTrace.get(i);
 
                 assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className"));
                 assertEquals("Element method name [" + i + "] is not correct.", e1.getMethodName(),
-                        e2.get("methodName"));
+                    e2.get("methodName"));
                 assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName"));
                 assertEquals("Element line number [" + i + "] is not correct.", e1.getLineNumber(),
-                        e2.get("lineNumber"));
+                    e2.get("lineNumber"));
             }
             assertNull("The cause should have no cause.", cause.get("cause"));
 
@@ -566,14 +422,6 @@ public class NoSqlDatabaseManagerTest {
 
             assertTrue("The context stack should be list.", object.get("contextStack") instanceof List);
             assertEquals("The context stack is not correct.", stack.asList(), object.get("contextStack"));
-
-            verify(this.provider, this.connection, event, message);
-        } finally {
-            try {
-                manager.close();
-            } catch (final Throwable ignore) {
-                /* */
-            }
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/78c6a1fc/log4j-web/pom.xml
----------------------------------------------------------------------
diff --git a/log4j-web/pom.xml b/log4j-web/pom.xml
index 22dd052..db78e15 100644
--- a/log4j-web/pom.xml
+++ b/log4j-web/pom.xml
@@ -69,8 +69,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>