diff --git a/lib/java/src/test/java/org/apache/thrift/TestAnnotationMetadata.java b/lib/java/src/test/java/org/apache/thrift/TestAnnotationMetadata.java
index a9381e6..83be6b9 100644
--- a/lib/java/src/test/java/org/apache/thrift/TestAnnotationMetadata.java
+++ b/lib/java/src/test/java/org/apache/thrift/TestAnnotationMetadata.java
@@ -24,11 +24,12 @@
 import java.util.Map;
 
 import org.apache.thrift.meta_data.FieldMetaData;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import thrift.test.OneOfEachBeans;
 import thrift.test.annotations.OneOfEachBeansWithAnnotations;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 public class TestAnnotationMetadata {
 
     @Test
@@ -36,11 +37,11 @@
         Map<? extends TFieldIdEnum, FieldMetaData> structMetaDataMap = FieldMetaData.getStructMetaDataMap(OneOfEachBeans.class);
         {
             Map<String, String> metadata = structMetaDataMap.get(OneOfEachBeans._Fields.I16_LIST).getFieldAnnotations();
-            Assert.assertEquals(Collections.emptyMap(), metadata);
+            assertEquals(Collections.emptyMap(), metadata);
         }
         {
             Map<String, String> metadata = structMetaDataMap.get(OneOfEachBeans._Fields.A_BITE).getFieldAnnotations();
-            Assert.assertEquals(Collections.emptyMap(), metadata);
+            assertEquals(Collections.emptyMap(), metadata);
         }
     }
 
@@ -49,13 +50,13 @@
         Map<? extends TFieldIdEnum, FieldMetaData> structMetaDataMap = FieldMetaData.getStructMetaDataMap(OneOfEachBeansWithAnnotations.class);
         {
             Map<String, String> metadata = structMetaDataMap.get(OneOfEachBeansWithAnnotations._Fields.I16_LIST).getFieldAnnotations();
-            Assert.assertEquals(Collections.emptyMap(), metadata);
+            assertEquals(Collections.emptyMap(), metadata);
         }
         {
             Map<String, String> metadata = structMetaDataMap.get(OneOfEachBeansWithAnnotations._Fields.A_BITE).getFieldAnnotations();
             Map<String, String> expected = new HashMap<>();
             expected.put("compression", "false");
-            Assert.assertEquals(expected, metadata);
+            assertEquals(expected, metadata);
         }
     }
 }
