diff --git a/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/TestSignatureInfo.java b/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/TestSignatureInfo.java
index d7fc0b4..938d8a6 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/TestSignatureInfo.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/poifs/crypt/dsig/TestSignatureInfo.java
@@ -82,6 +82,7 @@
 import org.apache.logging.log4j.Logger;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.POIDataSamples;
+import org.apache.poi.POITestCase;
 import org.apache.poi.ooxml.POIXMLDocument;
 import org.apache.poi.ooxml.util.DocumentHelper;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -169,7 +170,12 @@
     private KeyPair keyPair;
     private X509Certificate x509;
 
-    @AfterAll
+	@BeforeAll
+	public static void setUpClass() {
+		POITestCase.setImageIOCacheDir();
+	}
+
+	@AfterAll
     public static void removeUserLocale() {
         LocaleUtil.resetUserLocale();
     }
@@ -922,6 +928,8 @@
             try (OPCPackage pkg = OPCPackage.open(signDoc, PackageAccess.READ)) {
                 SignatureLine line2 = sup.get();
                 try (POIXMLDocument doc = reinit.init(line2, pkg)) {
+                	assertNotNull(doc);
+
                     line2.parse();
                     assertEquals(line.getSuggestedSigner(), line2.getSuggestedSigner());
                     assertEquals(line.getSuggestedSigner2(), line2.getSuggestedSigner2());
@@ -1018,7 +1026,7 @@
         final String alias = "Test";
         final char[] password = "test".toCharArray();
         File file = new File("build/test.pfx");
-        file.getParentFile().mkdir();
+        assertTrue(file.getParentFile().exists() || file.getParentFile().mkdir());
 
         KeyStore keystore = KeyStore.getInstance("PKCS12");
 
diff --git a/poi/src/test/java/org/apache/poi/POITestCase.java b/poi/src/test/java/org/apache/poi/POITestCase.java
index dbaae88..6337d4e 100644
--- a/poi/src/test/java/org/apache/poi/POITestCase.java
+++ b/poi/src/test/java/org/apache/poi/POITestCase.java
@@ -28,6 +28,7 @@
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
+import java.io.File;
 import java.lang.reflect.Field;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
@@ -36,6 +37,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.imageio.ImageIO;
+
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.SuppressForbidden;
 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
@@ -200,4 +203,21 @@
         assertTrue(min <= value, message + ": " + value + " is less than the minimum value of " + min);
         assertTrue(value <= max, message + ": " + value + " is greater than the maximum value of " + max);
     }
+
+	/**
+	 * Ensures that the temporary directory is defined and exists and
+	 * ensures ImageIO uses this directory for cache-files
+	 */
+	public static void setImageIOCacheDir() {
+		final String tmpDirProperty = System.getProperty("java.io.tmpdir");
+		if(tmpDirProperty == null || "".equals(tmpDirProperty)) {
+			return;
+		}
+		// ensure that temp-dir exists because ImageIO requires it
+		File tmpDir = new File(tmpDirProperty);
+		if(!tmpDir.exists() && !tmpDir.mkdirs()) {
+			throw new IllegalStateException("Could not create temporary directory " + tmpDirProperty + ", full path " + tmpDir.getAbsolutePath());
+		}
+		ImageIO.setCacheDirectory(tmpDir);
+	}
 }
diff --git a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java
index dd1de44..f90b535 100644
--- a/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java
+++ b/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java
@@ -23,13 +23,13 @@
 
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
-import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
 import javax.imageio.IIOException;
 import javax.imageio.ImageIO;
 
+import org.apache.poi.POITestCase;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
@@ -39,21 +39,12 @@
  * The code to retrieve images from a workbook provided by Trejkaz (trejkaz at trypticon dot org) in Bug 41223.
  */
 final class TestHSSFPictureData {
-    @BeforeAll
+	@BeforeAll
     public static void setUpClass() {
-        final String tmpDirProperty = System.getProperty("java.io.tmpdir");
-        if(tmpDirProperty == null || "".equals(tmpDirProperty)) {
-            return;
-        }
-        // ensure that temp-dir exists because ImageIO requires it
-        final File tmpDir = new File(tmpDirProperty);
-        if(!tmpDir.exists() && !tmpDir.mkdirs()) {
-            throw new IllegalStateException("Could not create temporary directory " + tmpDirProperty + ", full path " + tmpDir.getAbsolutePath());
-        }
-        ImageIO.setCacheDirectory(tmpDir);
-    }
+		POITestCase.setImageIOCacheDir();
+	}
 
-    @Test
+	@Test
 	void testPictures() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("SimpleWithImages.xls");
 
