diff --git a/pom.xml b/pom.xml
index 8636d59..2f18115 100644
--- a/pom.xml
+++ b/pom.xml
@@ -309,7 +309,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>3.8.2</version>
+      <version>4.13</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/src/test/java/org/apache/maven/plugin/changelog/ChangeLogTest.java b/src/test/java/org/apache/maven/plugin/changelog/ChangeLogTest.java
index d069363..fffe7e5 100644
--- a/src/test/java/org/apache/maven/plugin/changelog/ChangeLogTest.java
+++ b/src/test/java/org/apache/maven/plugin/changelog/ChangeLogTest.java
@@ -19,10 +19,10 @@
  * under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.maven.scm.ChangeFile;
 import org.apache.maven.scm.ChangeSet;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.junit.Test;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -30,13 +30,15 @@
 import java.text.SimpleDateFormat;
 import java.util.List;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 /**
  * @author Edwin Punzalan
- * @version $Id$
  */
 public class ChangeLogTest
-    extends TestCase
 {
+    @Test
     public void testReadFile()
         throws Exception
     {
@@ -53,7 +55,7 @@
         ChangeSet changeSet = changelogSets.getChangeSets().get( 0 );
 
         assertEquals( "Test changelog 1 set 1 date/time", "1977-08-06 05:30:00",
-                      new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
+                new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
 
         assertEquals( "Test changelog 1 set 1 author", "Edwin Punzalan", changeSet.getAuthor() );
 
@@ -63,14 +65,15 @@
 
         ChangeFile changeFile = changeSet.getFiles().get( 0 );
 
-        assertEquals( "Test changelog 1 set 1 file 1 filename", "/path/to/file.extension", changeFile.getName() );
+        assertEquals( "Test changelog 1 set 1 file 1 filename", "/path/to/file.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 1 set 1 file 1 revision", "1", changeFile.getRevision() );
 
         changeSet = changelogSets.getChangeSets().get( 1 );
 
         assertEquals( "Test changelog 1 set 2 date/time", "2005-02-24 21:30:00",
-                      new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
+                new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
 
         assertEquals( "Test changelog 1 set 2 author", "Edwin Punzalan", changeSet.getAuthor() );
 
@@ -80,13 +83,15 @@
 
         changeFile = changeSet.getFiles().get( 0 );
 
-        assertEquals( "Test changelog 1 set 2 file 1 filename", "/path/to/file.extension", changeFile.getName() );
+        assertEquals( "Test changelog 1 set 2 file 1 filename", "/path/to/file.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 1 set 2 file 1 revision", "2", changeFile.getRevision() );
 
         changeFile = changeSet.getFiles().get( 1 );
 
-        assertEquals( "Test changelog 1 set 2 file 2 filename", "/path/to/file2.extension", changeFile.getName() );
+        assertEquals( "Test changelog 1 set 2 file 2 filename", "/path/to/file2.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 1 set 2 file 2 revision", "2", changeFile.getRevision() );
 
@@ -97,7 +102,7 @@
         changeSet = changelogSets.getChangeSets().get( 0 );
 
         assertEquals( "Test changelog 2 set 1 date/time", "2005-02-25 22:45:00",
-                      new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
+                new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
 
         assertEquals( "Test changelog 2 set 1 author", "Keogh Edrich Punzalan", changeSet.getAuthor() );
 
@@ -107,14 +112,15 @@
 
         changeFile = changeSet.getFiles().get( 0 );
 
-        assertEquals( "Test changelog 2 set 1 file 1 filename", "/path/to/file.extension", changeFile.getName() );
+        assertEquals( "Test changelog 2 set 1 file 1 filename", "/path/to/file.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 2 set 1 file 1 revision", "3", changeFile.getRevision() );
 
         changeSet = changelogSets.getChangeSets().get( 1 );
 
         assertEquals( "Test changelog 2 set 2 date/time", "2100-02-25 05:30:00",
-                      new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
+                new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).format( changeSet.getDate() ) );
 
         assertEquals( "Test changelog 2 set 2 author", "Keogh Edrich Punzalan", changeSet.getAuthor() );
 
@@ -124,13 +130,15 @@
 
         changeFile = changeSet.getFiles().get( 0 );
 
-        assertEquals( "Test changelog 2 set 2 file 1 filename", "/path/to/file.extension", changeFile.getName() );
+        assertEquals( "Test changelog 2 set 2 file 1 filename", "/path/to/file.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 2 set 2 file 1 revision", "4", changeFile.getRevision() );
 
         changeFile = changeSet.getFiles().get( 1 );
 
-        assertEquals( "Test changelog 2 set 2 file 2 filename", "/path/to/file2.extension", changeFile.getName() );
+        assertEquals( "Test changelog 2 set 2 file 2 filename", "/path/to/file2.extension",
+                changeFile.getName() );
 
         assertEquals( "Test changelog 2 set 2 file 2 revision", "4", changeFile.getRevision() );
     }
diff --git a/src/test/java/org/apache/maven/plugin/changelog/FileActivityComparatorTest.java b/src/test/java/org/apache/maven/plugin/changelog/FileActivityComparatorTest.java
index 790cae7..4eef04f 100644
--- a/src/test/java/org/apache/maven/plugin/changelog/FileActivityComparatorTest.java
+++ b/src/test/java/org/apache/maven/plugin/changelog/FileActivityComparatorTest.java
@@ -19,30 +19,32 @@
  * under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.maven.scm.ChangeFile;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import static org.junit.Assert.assertTrue;
+
 /**
  * @author Edwin Punzalan
- * @version $Id$
  */
 public class FileActivityComparatorTest
-    extends TestCase
 {
     private FileActivityComparator comparator;
 
     /**
      * {@inheritDoc}
      */
-    protected void setUp()
-        throws Exception
+    @Before
+    public void setUp()
     {
         comparator = new FileActivityComparator();
     }
 
+    @Test
     public void testCompareByNumberOfCommits()
     {
         List<ChangeFile> list1 = new ArrayList<ChangeFile>();
@@ -62,6 +64,7 @@
         assertTrue( "Test compare by commits, greater than", comparator.compare( list1, list2 ) > 0 );
     }
 
+    @Test
     public void testCompareByRevision()
     {
         List<ChangeFile> list1 = new ArrayList<ChangeFile>();
@@ -85,6 +88,7 @@
         assertTrue( "Test compare by revision, greater than", comparator.compare( list1, list2 ) > 0 );
     }
 
+    @Test
     public void testCompareByName()
     {
         List<ChangeFile> list1 = new ArrayList<ChangeFile>();
