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>