diff --git a/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/ByteStringTest.java b/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/ByteStringTest.java
index 1d3d84d..cd21e3c 100644
--- a/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/ByteStringTest.java
+++ b/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/ByteStringTest.java
@@ -11,25 +11,25 @@
 class ByteStringTest {
 
   @Test
-  void testToModifiedBase64() {
+  void toModifiedBase64() {
     assertEquals("MciDXVydLGaHpQCRyFFC0bLYU_9Bap+4G07jB1RRDVI", testByteString1.modifiedBase64());
   }
 
   @Test
-  void testOfModifiedBase64() {
+  void ofModifiedBase64() {
     assertEquals(
         testByteString1,
         ByteString.ofModifiedBase64("MciDXVydLGaHpQCRyFFC0bLYU_9Bap+4G07jB1RRDVI"));
   }
 
   @Test
-  void testToHex() {
+  void toHex() {
     assertEquals(
         "31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52", testByteString1.hex());
   }
 
   @Test
-  void testOfHex() {
+  void ofHex() {
     assertEquals(
         testByteString1,
         ByteString.ofHex("31c8835d5c9d2c6687a50091c85142d1b2d853ff416a9fb81b4ee30754510d52"));
diff --git a/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/OstreeDecoderTest.java b/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/OstreeDecoderTest.java
index d8ad271..bca8142 100644
--- a/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/OstreeDecoderTest.java
+++ b/jgvariant-ostree/src/test/java/eu/mulk/jgvariant/ostree/OstreeDecoderTest.java
@@ -17,7 +17,12 @@
 import org.junit.jupiter.api.Test;
 
 @TestWithResources
-@SuppressWarnings("initialization.field.uninitialized")
+@SuppressWarnings({
+  "ImmutableListOf1",
+  "ImmutableMapOf1",
+  "initialization.field.uninitialized",
+  "NullAway"
+})
 class OstreeDecoderTest {
 
   @GivenBinaryResource("/ostree/summary")
@@ -42,7 +47,7 @@
   byte[] deltaPartPayloadBytes;
 
   @Test
-  void testSummaryDecoder() {
+  void summaryDecoder() {
     var decoder = Summary.decoder();
     var summary = decoder.decode(ByteBuffer.wrap(summaryBytes));
     assertAll(
@@ -65,35 +70,35 @@
   }
 
   @Test
-  void testCommitDecoder() {
+  void commitDecoder() {
     var decoder = Commit.decoder();
     var commit = decoder.decode(ByteBuffer.wrap(commitBytes));
     System.out.println(commit);
   }
 
   @Test
-  void testDirTreeDecoder() {
+  void dirTreeDecoder() {
     var decoder = DirTree.decoder();
     var dirTree = decoder.decode(ByteBuffer.wrap(dirTreeBytes));
     System.out.println(dirTree);
   }
 
   @Test
-  void testDirMetaDecoder() {
+  void dirMetaDecoder() {
     var decoder = DirMeta.decoder();
     var dirMeta = decoder.decode(ByteBuffer.wrap(dirMetaBytes));
     System.out.println(dirMeta);
   }
 
   @Test
-  void testSuperblockDecoder() {
+  void superblockDecoder() {
     var decoder = DeltaSuperblock.decoder();
     var deltaSuperblock = decoder.decode(ByteBuffer.wrap(deltaSuperblockBytes));
     System.out.println(deltaSuperblock);
   }
 
   @Test
-  void testPartPayloadDecoder() {
+  void partPayloadDecoder() {
     var superblockDecoder = DeltaSuperblock.decoder();
     var superblock = superblockDecoder.decode(ByteBuffer.wrap(deltaSuperblockBytes));
 
