This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-java.git


The following commit(s) were added to refs/heads/master by this push:
     new 6c7cefdd8 GH-3383: Modernize mockito (#3384)
6c7cefdd8 is described below

commit 6c7cefdd8a76e8a137366cc5360a473c982e252c
Author: Aaron Niskode-Dossett <[email protected]>
AuthorDate: Thu Feb 26 22:43:10 2026 -0600

    GH-3383: Modernize mockito (#3384)
---
 parquet-avro/pom.xml                               | 20 +------------
 .../parquet/avro/TestAvroRecordConverter.java      | 21 +++++++------
 .../parquet/avro/TestAvroSchemaConverter.java      | 24 +++++++++------
 parquet-column/pom.xml                             |  8 ++++-
 parquet-common/pom.xml                             |  2 +-
 .../org/apache/parquet/bytes/TestBytesInput.java   |  6 ++--
 parquet-hadoop/pom.xml                             |  8 ++++-
 .../dictionarylevel/DictionaryFilterTest.java      |  6 ++--
 .../hadoop/TestColumnChunkPageWriteStore.java      |  8 ++---
 parquet-thrift/pom.xml                             |  6 ++++
 .../TestStrictFieldProjectionFilter.java           | 34 ++++++++++------------
 pom.xml                                            |  9 +-----
 12 files changed, 76 insertions(+), 76 deletions(-)

diff --git a/parquet-avro/pom.xml b/parquet-avro/pom.xml
index 3bff25e22..3c84eb66d 100644
--- a/parquet-avro/pom.xml
+++ b/parquet-avro/pom.xml
@@ -112,25 +112,7 @@
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>2.23.0</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-junit4</artifactId>
-      <version>${powermock.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-core</artifactId>
-      <version>${powermock.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-mockito2</artifactId>
-      <version>${powermock.version}</version>
+      <version>${mockito.version}</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git 
a/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroRecordConverter.java
 
b/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroRecordConverter.java
index 315320bbd..7c1db48f4 100644
--- 
a/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroRecordConverter.java
+++ 
b/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroRecordConverter.java
@@ -34,22 +34,25 @@ import org.apache.avro.LogicalTypes;
 import org.apache.avro.Schema;
 import org.apache.avro.SchemaBuilder;
 import org.apache.avro.specific.SpecificData;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(AvroRecordConverter.class)
 public class TestAvroRecordConverter {
 
+  private MockedStatic<AvroRecordConverter> avroRecordConverterMock;
+
   @Before
   public void setup() {
     // Default to calling real methods unless overridden in specific test
-    PowerMockito.mockStatic(AvroRecordConverter.class, CALLS_REAL_METHODS);
+    avroRecordConverterMock = Mockito.mockStatic(AvroRecordConverter.class, 
CALLS_REAL_METHODS);
+  }
+
+  @After
+  public void tearDown() {
+    avroRecordConverterMock.close();
   }
 
   @Test
@@ -86,7 +89,7 @@ public class TestAvroRecordConverter {
   // Test logical type support for older Avro versions
   @Test
   public void 
testModelForSpecificRecordWithLogicalTypesWithDeprecatedAvro1_8() {
-    
Mockito.when(AvroRecordConverter.getRuntimeAvroVersion()).thenReturn("1.8.2");
+    
avroRecordConverterMock.when(AvroRecordConverter::getRuntimeAvroVersion).thenReturn("1.8.2");
 
     // Test that model is generated correctly when record contains both 
top-level and nested logical types
     SpecificData model = 
AvroRecordConverter.getModelForSchema(LogicalTypesTestDeprecated.SCHEMA$);
@@ -108,7 +111,7 @@ public class TestAvroRecordConverter {
 
   @Test
   public void 
testModelForSpecificRecordWithLogicalTypesWithDeprecatedAvro1_7() {
-    
Mockito.when(AvroRecordConverter.getRuntimeAvroVersion()).thenReturn("1.7.7");
+    
avroRecordConverterMock.when(AvroRecordConverter::getRuntimeAvroVersion).thenReturn("1.7.7");
 
     // Test that model is generated correctly
     final SpecificData model = 
AvroRecordConverter.getModelForSchema(LogicalTypesTestDeprecated.SCHEMA$);
diff --git 
a/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroSchemaConverter.java
 
b/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroSchemaConverter.java
index 346fafe7d..3a78eefbb 100644
--- 
a/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroSchemaConverter.java
+++ 
b/parquet-avro/src/test/java/org/apache/parquet/avro/TestAvroSchemaConverter.java
@@ -62,25 +62,27 @@ import org.apache.parquet.schema.PrimitiveType;
 import org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName;
 import org.apache.parquet.schema.Type;
 import org.apache.parquet.schema.Types;
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.mockito.MockedStatic;
 import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(AvroRecordConverter.class)
 public class TestAvroSchemaConverter {
 
   private static final Configuration NEW_BEHAVIOR = new Configuration(false);
+  private MockedStatic<AvroRecordConverter> avroRecordConverterMock;
 
   @Before
   public void setupMockito() {
-    PowerMockito.mockStatic(AvroRecordConverter.class, CALLS_REAL_METHODS);
+    avroRecordConverterMock = Mockito.mockStatic(AvroRecordConverter.class, 
CALLS_REAL_METHODS);
+  }
+
+  @After
+  public void tearDown() {
+    avroRecordConverterMock.close();
   }
 
   @BeforeClass
@@ -706,7 +708,9 @@ public class TestAvroSchemaConverter {
 
     // Test that conversions for timestamp types only use APIs that are 
available in the user's Avro version
     for (String avroVersion : ImmutableSet.of("1.7.0", "1.8.0", "1.9.0", 
"1.10.0", "1.11.0")) {
-      
Mockito.when(AvroRecordConverter.getRuntimeAvroVersion()).thenReturn(avroVersion);
+      avroRecordConverterMock
+          .when(AvroRecordConverter::getRuntimeAvroVersion)
+          .thenReturn(avroVersion);
       final Schema converted = new AvroSchemaConverter()
           .convert(Types.buildMessage()
               .addField(Types.primitive(INT64, Type.Repetition.REQUIRED)
@@ -792,7 +796,9 @@ public class TestAvroSchemaConverter {
 
     // Test that conversions for timestamp types only use APIs that are 
available in the user's Avro version
     for (String avroVersion : ImmutableSet.of("1.7.0", "1.8.0", "1.9.0", 
"1.10.0", "1.11.0")) {
-      
Mockito.when(AvroRecordConverter.getRuntimeAvroVersion()).thenReturn(avroVersion);
+      avroRecordConverterMock
+          .when(AvroRecordConverter::getRuntimeAvroVersion)
+          .thenReturn(avroVersion);
       final Schema converted = new AvroSchemaConverter()
           .convert(Types.buildMessage()
               .addField(Types.primitive(INT64, Type.Repetition.REQUIRED)
diff --git a/parquet-column/pom.xml b/parquet-column/pom.xml
index db6857ae3..f9d976980 100644
--- a/parquet-column/pom.xml
+++ b/parquet-column/pom.xml
@@ -90,7 +90,7 @@
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
+      <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
     </dependency>
@@ -100,6 +100,12 @@
       <version>${commons-lang3.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <version>1.3</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/parquet-common/pom.xml b/parquet-common/pom.xml
index f3fb58be6..037e65799 100644
--- a/parquet-common/pom.xml
+++ b/parquet-common/pom.xml
@@ -64,7 +64,7 @@
 
     <dependency>
       <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
+      <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
     </dependency>
diff --git 
a/parquet-common/src/test/java/org/apache/parquet/bytes/TestBytesInput.java 
b/parquet-common/src/test/java/org/apache/parquet/bytes/TestBytesInput.java
index 6ffe3c650..38d4b7921 100644
--- a/parquet-common/src/test/java/org/apache/parquet/bytes/TestBytesInput.java
+++ b/parquet-common/src/test/java/org/apache/parquet/bytes/TestBytesInput.java
@@ -21,8 +21,8 @@ package org.apache.parquet.bytes;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -401,6 +401,6 @@ public class TestBytesInput {
     Consumer<ByteBuffer> callbackMock = Mockito.mock(Consumer.class);
     factory.get().toByteBuffer(allocatorMock, callbackMock);
     verify(allocatorMock, never()).allocate(anyInt());
-    verify(callbackMock, never()).accept(anyObject());
+    verify(callbackMock, never()).accept(any());
   }
 }
diff --git a/parquet-hadoop/pom.xml b/parquet-hadoop/pom.xml
index 505b90b5c..ad5a6b9b6 100644
--- a/parquet-hadoop/pom.xml
+++ b/parquet-hadoop/pom.xml
@@ -170,7 +170,7 @@
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
+      <artifactId>mockito-core</artifactId>
       <version>${mockito.version}</version>
       <scope>test</scope>
     </dependency>
@@ -191,6 +191,12 @@
       <artifactId>slf4j-api</artifactId>
       <version>${slf4j.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <version>1.3</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
diff --git 
a/parquet-hadoop/src/test/java/org/apache/parquet/filter2/dictionarylevel/DictionaryFilterTest.java
 
b/parquet-hadoop/src/test/java/org/apache/parquet/filter2/dictionarylevel/DictionaryFilterTest.java
index 20ce8c9d5..981a3820b 100644
--- 
a/parquet-hadoop/src/test/java/org/apache/parquet/filter2/dictionarylevel/DictionaryFilterTest.java
+++ 
b/parquet-hadoop/src/test/java/org/apache/parquet/filter2/dictionarylevel/DictionaryFilterTest.java
@@ -45,7 +45,7 @@ import static 
org.apache.parquet.schema.MessageTypeParser.parseMessageType;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
@@ -731,7 +731,7 @@ public class DictionaryFilterTest {
         "Should never drop block using plain encoding",
         canDrop(notEq(plain, nElements + 10), ccmd, dictionaryStore));
 
-    verifyZeroInteractions(dictionaryStore);
+    verifyNoInteractions(dictionaryStore);
   }
 
   @Test
@@ -757,7 +757,7 @@ public class DictionaryFilterTest {
         "Should never drop block using plain encoding",
         canDrop(notEq(plain, nElements + 10), ccmd, dictionaryStore));
 
-    verifyZeroInteractions(dictionaryStore);
+    verifyNoInteractions(dictionaryStore);
   }
 
   @Test
diff --git 
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestColumnChunkPageWriteStore.java
 
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestColumnChunkPageWriteStore.java
index 2b037b526..a17cf678f 100644
--- 
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestColumnChunkPageWriteStore.java
+++ 
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestColumnChunkPageWriteStore.java
@@ -32,10 +32,10 @@ import static 
org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName.INT64;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.isNull;
-import static org.mockito.Matchers.same;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.ArgumentMatchers.same;
 import static org.mockito.Mockito.inOrder;
 
 import java.io.ByteArrayInputStream;
diff --git a/parquet-thrift/pom.xml b/parquet-thrift/pom.xml
index 9c4d1fe8c..975f7014b 100644
--- a/parquet-thrift/pom.xml
+++ b/parquet-thrift/pom.xml
@@ -77,6 +77,12 @@
       <version>${guava.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>${mockito.version}</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>com.twitter.elephantbird</groupId>
       <artifactId>elephant-bird-core</artifactId>
diff --git 
a/parquet-thrift/src/test/java/org/apache/parquet/thrift/projection/TestStrictFieldProjectionFilter.java
 
b/parquet-thrift/src/test/java/org/apache/parquet/thrift/projection/TestStrictFieldProjectionFilter.java
index cee9e9bbd..f0a8ba53d 100644
--- 
a/parquet-thrift/src/test/java/org/apache/parquet/thrift/projection/TestStrictFieldProjectionFilter.java
+++ 
b/parquet-thrift/src/test/java/org/apache/parquet/thrift/projection/TestStrictFieldProjectionFilter.java
@@ -18,11 +18,12 @@
  */
 package org.apache.parquet.thrift.projection;
 
-import static org.easymock.EasyMock.createMockBuilder;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 
 import java.util.Arrays;
 import java.util.List;
@@ -112,23 +113,20 @@ public class TestStrictFieldProjectionFilter {
 
   @Test
   public void testWarnWhenMultiplePatternsMatch() {
-    StrictFieldProjectionFilter filter = 
createMockBuilder(StrictFieldProjectionFilter.class)
-        .withConstructor(Arrays.asList("a.b.c.{x_average,z_average}", 
"a.*_average"))
-        .addMockedMethod("warn")
-        .createMock();
-
-    // set expectations
-    filter.warn("Field path: 'a.b.c.x_average' matched more than one glob path 
pattern. "
-        + "First match: 'a.b.c.{x_average,z_average}' (when expanded to 
'a.b.c.x_average') "
-        + "second match:'a.*_average' (when expanded to 'a.*_average')");
-    filter.warn("Field path: 'a.b.c.z_average' matched more than one glob path 
pattern. "
-        + "First match: 'a.b.c.{x_average,z_average}' (when expanded to 
'a.b.c.z_average') "
-        + "second match:'a.*_average' (when expanded to 'a.*_average')");
-
-    replay(filter);
+    StrictFieldProjectionFilter filter =
+        spy(new 
StrictFieldProjectionFilter(Arrays.asList("a.b.c.{x_average,z_average}", 
"a.*_average")));
+    doNothing().when(filter).warn(anyString());
 
     assertMatches(filter, "a.b.c.x_average", "a.b.c.z_average", 
"a.other.w_average");
     assertDoesNotMatch(filter, "hello");
-    verify(filter);
+
+    verify(filter)
+        .warn("Field path: 'a.b.c.x_average' matched more than one glob path 
pattern. "
+            + "First match: 'a.b.c.{x_average,z_average}' (when expanded to 
'a.b.c.x_average') "
+            + "second match:'a.*_average' (when expanded to 'a.*_average')");
+    verify(filter)
+        .warn("Field path: 'a.b.c.z_average' matched more than one glob path 
pattern. "
+            + "First match: 'a.b.c.{x_average,z_average}' (when expanded to 
'a.b.c.z_average') "
+            + "second match:'a.*_average' (when expanded to 'a.*_average')");
   }
 }
diff --git a/pom.xml b/pom.xml
index 88c8b5059..d27788932 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,8 +98,7 @@
     <avro.version>1.11.5</avro.version>
     <guava.version>33.5.0-jre</guava.version>
     <brotli-codec.version>0.1.1</brotli-codec.version>
-    <mockito.version>1.10.19</mockito.version>
-    <powermock.version>2.0.9</powermock.version>
+    <mockito.version>5.21.0</mockito.version>
     <net.openhft.version>0.27ea0</net.openhft.version>
     <exec-maven-plugin.version>3.5.0</exec-maven-plugin.version>
     <jts.version>1.20.0</jts.version>
@@ -163,12 +162,6 @@
       <version>4.13.2</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
-      <version>5.6.0</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <dependencyManagement>

Reply via email to