@@ -216,37 +217,54 @@
         
       
     
-    
     
-      org.jenkins-ci.test
-      docker-fixtures
-      ${docker-fixtures.version}
+      org.jenkins-ci.plugins
+      credentials
       test
     
     
       org.jenkins-ci.plugins
-      ssh-slaves
+      git
       test
     
     
       org.jenkins-ci.plugins
-      credentials
+      git-client
       test
     
     
       org.jenkins-ci.plugins
-      git
+      timestamper
+      1.17
       test
     
+
     
       org.jenkins-ci.plugins
-      git-client
+      ssh-credentials
       test
     
     
       org.jenkins-ci.plugins
-      timestamper
-      1.17
+      ssh-slaves
+      test
+    
+    
+      org.testcontainers
+      testcontainers
+      ${testcontainers.version}
+      test
+      
+        
+          org.apache.commons
+          commons-compress
+        
+      
+    
+    
+      org.testcontainers
+      junit-jupiter
+      ${testcontainers.version}
       test
     
   
diff --git a/plugin/src/main/resources/index.jelly b/plugin/src/main/resources/index.jelly
index 086ce9c73..109e179e9 100644
--- a/plugin/src/main/resources/index.jelly
+++ b/plugin/src/main/resources/index.jelly
@@ -1,4 +1,4 @@
 
 
-    This plugin serves as API to integrate and publish multiple coverage report types.
+    Collects code coverage results of different tools (JaCoCo, Cobertura, etc.) and visualizes the results.
 
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/AbstractCoverageTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/AbstractCoverageTest.java
index 063e39d66..ffb057aec 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/AbstractCoverageTest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/AbstractCoverageTest.java
@@ -18,7 +18,7 @@
  *
  * @author Ullrich Hafner
  */
-public class AbstractCoverageTest extends ResourceTest {
+public abstract class AbstractCoverageTest extends ResourceTest {
     static final double PRECISION = 0.01;
     static final CoverageMetric MODULE = CoverageMetric.MODULE;
     static final CoverageMetric PACKAGE = CoverageMetric.PACKAGE;
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePlugin0vsOkITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePlugin0vsOkITest.java
index 411b6df54..dcf5df3cf 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePlugin0vsOkITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePlugin0vsOkITest.java
@@ -2,7 +2,7 @@
 
 import java.util.Collections;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -15,14 +15,14 @@
 /**
  * Tests if 0 reports fail vs ok.
  */
-public class CoveragePlugin0vsOkITest extends IntegrationTestWithJenkinsPerSuite {
+class CoveragePlugin0vsOkITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_ANALYSIS_MODEL_FILE = "jacoco-analysis-model.xml";
 
     /**
      * Adapter reads no file and failNoReports is set true in freestyle project.
      */
     @Test
-    public void freeStyleNoFileAndFailNoReportsTrue() {
+    void freeStyleNoFileAndFailNoReportsTrue() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(true, "");
 
         buildSuccessfully(project);
@@ -32,7 +32,7 @@ public void freeStyleNoFileAndFailNoReportsTrue() {
      * Adapter reads no file and failNoReports is set false in freestyle project.
      */
     @Test
-    public void freeStyleNoFileAndFailNoReportsFalse() {
+    void freeStyleNoFileAndFailNoReportsFalse() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(false, "");
 
         buildSuccessfully(project);
@@ -42,7 +42,7 @@ public void freeStyleNoFileAndFailNoReportsFalse() {
      * Adapter reads one file and failNoReports is set true in freestyle project.
      */
     @Test
-    public void freeStyleWithFileAndFailNoReportsTrue() {
+    void freeStyleWithFileAndFailNoReportsTrue() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(true, JACOCO_ANALYSIS_MODEL_FILE);
 
         buildSuccessfully(project);
@@ -52,7 +52,7 @@ public void freeStyleWithFileAndFailNoReportsTrue() {
      * Adapter reads one file and failNoReports is set false in freestyle project.
      */
     @Test
-    public void freeStyleWithFileAndFailNoReportsFalse() {
+    void freeStyleWithFileAndFailNoReportsFalse() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(false, JACOCO_ANALYSIS_MODEL_FILE);
 
         buildSuccessfully(project);
@@ -62,7 +62,7 @@ public void freeStyleWithFileAndFailNoReportsFalse() {
      * Adapter reads one file and failNoReports is set false in freestyle project.
      */
     @Test
-    public void freeStyleWithFileWildcardAndFailNoReportsTrue() {
+    void freeStyleWithFileWildcardAndFailNoReportsTrue() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(true, "**/*.xml");
 
         buildSuccessfully(project);
@@ -72,7 +72,7 @@ public void freeStyleWithFileWildcardAndFailNoReportsTrue() {
      * Adapter reads one file and failNoReports is set false in freestyle project.
      */
     @Test
-    public void freeStyleWithFileWildcardAndFailNoReportsFalse() {
+    void freeStyleWithFileWildcardAndFailNoReportsFalse() {
         FreeStyleProject project = createFreeStyleProjectWithFailNoReports(false, "**/*.xml");
 
         buildSuccessfully(project);
@@ -82,7 +82,7 @@ public void freeStyleWithFileWildcardAndFailNoReportsFalse() {
      * Adapter reads no file and failNoReports is set true in pipeline project.
      */
     @Test
-    public void pipelineNoFileAndFailNoReportsTrue() {
+    void pipelineNoFileAndFailNoReportsTrue() {
         WorkflowJob job = getPipelineProjectWithJacoco(true, "");
 
         buildSuccessfully(job);
@@ -92,7 +92,7 @@ public void pipelineNoFileAndFailNoReportsTrue() {
      * Adapter reads no file and failNoReports is set false in pipeline project.
      */
     @Test
-    public void pipelineNoFileAndFailNoReportsFalse() {
+    void pipelineNoFileAndFailNoReportsFalse() {
         WorkflowJob job = getPipelineProjectWithJacoco(false, "");
 
         buildSuccessfully(job);
@@ -102,7 +102,7 @@ public void pipelineNoFileAndFailNoReportsFalse() {
      * Adapter reads one file and failNoReports is set true in pipeline project.
      */
     @Test
-    public void pipelineWithFileAndFailNoReportsTrue() {
+    void pipelineWithFileAndFailNoReportsTrue() {
         WorkflowJob job = getPipelineProjectWithJacoco(true, JACOCO_ANALYSIS_MODEL_FILE);
 
         buildSuccessfully(job);
@@ -112,7 +112,7 @@ public void pipelineWithFileAndFailNoReportsTrue() {
      * Adapter reads one file and failNoReports is set false in pipeline project.
      */
     @Test
-    public void pipelineWithFileAndFailNoReportsFalse() {
+    void pipelineWithFileAndFailNoReportsFalse() {
         WorkflowJob job = getPipelineProjectWithJacoco(false, JACOCO_ANALYSIS_MODEL_FILE);
 
         buildSuccessfully(job);
@@ -122,7 +122,7 @@ public void pipelineWithFileAndFailNoReportsFalse() {
      * Adapter reads one file and failNoReports is set false in pipeline project.
      */
     @Test
-    public void pipelineWithFileWildcardAndFailNoReportsTrue() {
+    void pipelineWithFileWildcardAndFailNoReportsTrue() {
         WorkflowJob job = getPipelineProjectWithJacoco(true, "**/*.xml");
 
         buildSuccessfully(job);
@@ -132,7 +132,7 @@ public void pipelineWithFileWildcardAndFailNoReportsTrue() {
      * Adapter reads one file and failNoReports is set false in pipeline project.
      */
     @Test
-    public void pipelineWithFileWildcardAndFailNoReportsFalse() {
+    void pipelineWithFileWildcardAndFailNoReportsFalse() {
         WorkflowJob job = getPipelineProjectWithJacoco(false, "**/*.xml");
 
         buildSuccessfully(job);
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginITest.java
index 880048020..f86fff058 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginITest.java
@@ -4,8 +4,8 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -25,7 +25,7 @@
 /**
  * Integration test for different jacoco and cobertura files.
  */
-public class CoveragePluginITest extends IntegrationTestWithJenkinsPerSuite {
+class CoveragePluginITest extends IntegrationTestWithJenkinsPerSuite {
 
     /**
      * Covered lines in {@value JACOCO_ANALYSIS_MODEL_FILE}.
@@ -87,9 +87,9 @@ public class CoveragePluginITest extends IntegrationTestWithJenkinsPerSuite {
     /**
      * Pipeline integration test with no adapter.
      */
-    @Ignore
+    @Disabled("Bug")
     @Test
-    public void pipelineForNoAdapter() {
+    void pipelineForNoAdapter() {
         WorkflowJob job = createPipeline();
         job.setDefinition(new CpsFlowDefinition("node {"
                 + "   publishCoverage adapters: []"
@@ -101,9 +101,9 @@ public void pipelineForNoAdapter() {
     /**
      * Freestyle integration test with no adapter.
      */
-    @Ignore
+    @Disabled("Bug")
     @Test
-    public void freestyleForNoAdapter() {
+    void freestyleForNoAdapter() {
         FreeStyleProject project = createFreeStyleProject();
         CoveragePublisher coveragePublisher = new CoveragePublisher();
         project.getPublishersList().add(coveragePublisher);
@@ -114,7 +114,7 @@ public void freestyleForNoAdapter() {
      * Pipeline integration test with no file.
      */
     @Test
-    public void pipelineForNoJacoco() {
+    void pipelineForNoJacoco() {
         WorkflowJob job = createPipeline();
         job.setDefinition(getCpsFlowDefinitionWithAdapter(JACOCO_ADAPTER));
 
@@ -123,7 +123,7 @@ public void pipelineForNoJacoco() {
 
     /** Example integration test for a pipeline with code coverage. */
     @Test
-    public void pipelineForOneJacoco() {
+    void pipelineForOneJacoco() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_FILE);
         job.setDefinition(getCpsFlowDefinitionWithAdapter(JACOCO_ADAPTER));
 
@@ -134,7 +134,7 @@ public void pipelineForOneJacoco() {
      * Pipeline integration test with two jacoco files.
      */
     @Test
-    public void pipelineForTwoJacoco() {
+    void pipelineForTwoJacoco() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_FILE, JACOCO_CODINGSTYLE_FILE);
         job.setDefinition(getCpsFlowDefinitionWithAdapter(JACOCO_ADAPTER));
 
@@ -145,7 +145,7 @@ public void pipelineForTwoJacoco() {
      * Freestyle integration test with no jacoco file.
      */
     @Test
-    public void freestyleForNoJacoco() {
+    void freestyleForNoJacoco() {
         FreeStyleProject project = createFreeStyleProject();
 
         CoveragePublisher coveragePublisher = new CoveragePublisher();
@@ -160,7 +160,7 @@ public void freestyleForNoJacoco() {
      * Freestyle integration test with one jacoco file.
      */
     @Test
-    public void freestyleForOneJacoco() {
+    void freestyleForOneJacoco() {
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, JACOCO_ANALYSIS_MODEL_FILE);
         CoveragePublisher coveragePublisher = new CoveragePublisher();
@@ -175,7 +175,7 @@ public void freestyleForOneJacoco() {
      * Freestyle integration test with two jacoco files.
      */
     @Test
-    public void freestyleForTwoJacoco() {
+    void freestyleForTwoJacoco() {
 
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, JACOCO_ANALYSIS_MODEL_FILE, JACOCO_CODINGSTYLE_FILE);
@@ -196,7 +196,7 @@ public void freestyleForTwoJacoco() {
      * Pipeline integration test with no cobertura file.
      */
     @Test
-    public void pipelineForNoCobertura() {
+    void pipelineForNoCobertura() {
         WorkflowJob job = createPipeline();
         job.setDefinition(getCpsFlowDefinitionWithAdapter(COBERTURA_ADAPTER));
 
@@ -207,7 +207,7 @@ public void pipelineForNoCobertura() {
      * Pipeline integration test with one cobertura file.
      */
     @Test
-    public void pipelineForOneCobertura() {
+    void pipelineForOneCobertura() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(COBERTURA_HIGHER_COVERAGE_FILE);
         job.setDefinition(getCpsFlowDefinitionWithAdapter(COBERTURA_ADAPTER));
 
@@ -218,7 +218,7 @@ public void pipelineForOneCobertura() {
      * Pipeline integration test with two cobertura files.
      */
     @Test
-    public void pipelineForTwoCobertura() {
+    void pipelineForTwoCobertura() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(COBERTURA_HIGHER_COVERAGE_FILE,
                 COBERTURA_WITH_LOTS_OF_DATA_FILE);
 
@@ -231,7 +231,7 @@ public void pipelineForTwoCobertura() {
      * Freestyle integration test with no cobertura file.
      */
     @Test
-    public void freestyleForNoCobertura() {
+    void freestyleForNoCobertura() {
         FreeStyleProject project = createFreeStyleProject();
 
         CoveragePublisher coveragePublisher = new CoveragePublisher();
@@ -246,7 +246,7 @@ public void freestyleForNoCobertura() {
      * Freestyle integration test with one cobertura file.
      */
     @Test
-    public void freestyleForOneCobertura() {
+    void freestyleForOneCobertura() {
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, COBERTURA_HIGHER_COVERAGE_FILE);
         CoveragePublisher coveragePublisher = new CoveragePublisher();
@@ -260,10 +260,9 @@ public void freestyleForOneCobertura() {
     /**
      * Freestyle integration test with two cobertura files.
      */
-    @Ignore
+    @Disabled("Bug")
     @Test
-    public void freestyleForTwoCobertura() {
-
+    void freestyleForTwoCobertura() {
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, COBERTURA_HIGHER_COVERAGE_FILE, COBERTURA_WITH_LOTS_OF_DATA_FILE);
         CoveragePublisher coveragePublisher = new CoveragePublisher();
@@ -285,7 +284,7 @@ public void freestyleForTwoCobertura() {
      * Pipeline integration test with one cobertura and one jacoco file.
      */
     @Test
-    public void pipelineForOneCoberturaAndOneJacoco() {
+    void pipelineForOneCoberturaAndOneJacoco() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_FILE, COBERTURA_HIGHER_COVERAGE_FILE);
         job.setDefinition(new CpsFlowDefinition("node {"
                 + "   publishCoverage adapters: [jacocoAdapter('**/*.xml'), istanbulCoberturaAdapter('**/*.xml')]"
@@ -298,7 +297,7 @@ public void pipelineForOneCoberturaAndOneJacoco() {
      * Freestyle integration test with one cobertura and one jacoco file.
      */
     @Test
-    public void freestyleForOneCoberturaAndOneJacoco() {
+    void freestyleForOneCoberturaAndOneJacoco() {
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, JACOCO_ANALYSIS_MODEL_FILE, COBERTURA_HIGHER_COVERAGE_FILE);
 
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginSourceITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginSourceITest.java
index b57e9774b..adc62ed7c 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginSourceITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoveragePluginSourceITest.java
@@ -7,28 +7,15 @@
 import java.util.Collections;
 import java.util.Optional;
 
-import org.junit.AssumptionViolatedException;
-import org.junit.Rule;
-import org.junit.Test;
-
-import com.cloudbees.plugins.credentials.CredentialsScope;
-import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
-import com.cloudbees.plugins.credentials.domains.Domain;
-import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
+import org.junit.jupiter.api.Test;
 
 import edu.hm.hafner.util.PathUtil;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
-import org.jenkinsci.test.acceptance.docker.DockerContainer;
-import org.jenkinsci.test.acceptance.docker.DockerRule;
 import hudson.model.FreeStyleProject;
 import hudson.model.Run;
 import hudson.model.TopLevelItem;
-import hudson.plugins.sshslaves.SSHLauncher;
-import hudson.slaves.DumbSlave;
-import hudson.slaves.EnvironmentVariablesNodeProperty;
-import hudson.slaves.EnvironmentVariablesNodeProperty.Entry;
 import jenkins.model.ParameterizedJobMixIn.ParameterizedJob;
 
 import io.jenkins.plugins.coverage.CoveragePublisher;
@@ -38,7 +25,6 @@
 import io.jenkins.plugins.util.IntegrationTestWithJenkinsPerSuite;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.assertj.core.api.Assumptions.*;
 
 /**
  * Integration tests for the coverage API plugin.
@@ -46,23 +32,18 @@
  * @author Ullrich Hafner
  */
 @SuppressWarnings({"checkstyle:ClassDataAbstractionCoupling", "checkstyle:ClassFanOutComplexity"})
-public class CoveragePluginSourceITest extends IntegrationTestWithJenkinsPerSuite {
+class CoveragePluginSourceITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String ACU_COBOL_PARSER = "public class AcuCobolParser extends LookaheadParser {";
     private static final String NO_SOURCE_CODE = "n/a";
     private static final String SOURCE_FILE = "AcuCobolParser.java.txt";
     private static final String PACKAGE_PATH = "edu/hm/hafner/analysis/parser/";
     private static final String ACU_COBOL_PARSER_COVERAGE_REPORT = "jacoco-acu-cobol-parser.xml";
     private static final PathUtil PATH_UTIL = new PathUtil();
-
-    /** Docker container for java-maven builds. Contains also git to check out from an SCM. */
-    @Rule
-    public DockerRule javaDockerRule = new DockerRule<>(JavaGitContainer.class);
-
-    private static final String FILE_NAME = "jacoco-analysis-model.xml";
+    static final String FILE_NAME = "jacoco-analysis-model.xml";
 
     /** Verifies that the plugin reads source code from the workspace root. */
     @Test
-    public void coveragePluginPipelineWithSourceCode() {
+    void coveragePluginPipelineWithSourceCode() {
         Run, ?> workspace = runCoverageWithSourceCode("", "");
 
         assertThat(getConsoleLog(workspace)).contains(createSingleMessage(workspace));
@@ -74,7 +55,7 @@ private String createSingleMessage(final Run, ?> workspace) {
 
     /** Verifies that the plugin reads source code in subdirectories of the workspace.  */
     @Test
-    public void coveragePluginPipelineWithSourceCodeInSubdirectory() {
+    void coveragePluginPipelineWithSourceCodeInSubdirectory() {
         Run, ?> workspace = runCoverageWithSourceCode("", "");
         assertThat(getConsoleLog(workspace)).contains(createSingleMessage(workspace));
     }
@@ -86,7 +67,7 @@ private String createSingleDirectory(final Run, ?> workspace) {
 
     /** Verifies that the plugin reads source code in external but approved directories. */
     @Test
-    public void coveragePluginPipelineWithSourceCodeInPermittedDirectory() throws IOException {
+    void coveragePluginPipelineWithSourceCodeInPermittedDirectory() throws IOException {
         String directory = createExternalSourceFolder();
         PrismConfiguration.getInstance().setSourceDirectories(Collections.singletonList(
                 new PermittedSourceCodeDirectory(directory)));
@@ -100,11 +81,11 @@ public void coveragePluginPipelineWithSourceCodeInPermittedDirectory() throws IO
 
     /** Verifies that the plugin refuses source code in directories that are not approved in Jenkins' configuration. */
     @Test
-    public void coveragePluginPipelineNotRegisteredSourceCodeDirectory() throws IOException {
+    void coveragePluginPipelineNotRegisteredSourceCodeDirectory() throws IOException {
         String sourceDirectory = createExternalSourceFolder();
 
         WorkflowJob job = createPipelineWithWorkspaceFiles(ACU_COBOL_PARSER_COVERAGE_REPORT);
-        copyFileToWorkspace(job, SOURCE_FILE, "ignore" + PACKAGE_PATH + "AcuCobolParser.java");
+        copyFileToWorkspace(job, SOURCE_FILE, "ignore/" + PACKAGE_PATH + "AcuCobolParser.java");
 
         String sourceCodeRetention = "STORE_ALL_BUILD";
         job.setDefinition(createPipelineWithSourceCode(sourceCodeRetention, sourceDirectory));
@@ -133,8 +114,7 @@ private String createExternalSourceFolder() throws IOException {
         copyFileToWorkspace(job, SOURCE_FILE, checkoutDirectory + PACKAGE_PATH + "AcuCobolParser.java");
 
         String sourceCodeRetention = "STORE_ALL_BUILD";
-        job.setDefinition(createPipelineWithSourceCode(sourceCodeRetention, sourceDirectory
-        ));
+        job.setDefinition(createPipelineWithSourceCode(sourceCodeRetention, sourceDirectory));
 
         Run, ?> firstBuild = buildSuccessfully(job);
 
@@ -147,8 +127,7 @@ private String createExternalSourceFolder() throws IOException {
         verifySourceCodeInBuild(secondBuild, ACU_COBOL_PARSER);
         verifySourceCodeInBuild(firstBuild, ACU_COBOL_PARSER); // should be still available
 
-        job.setDefinition(createPipelineWithSourceCode("STORE_LAST_BUILD", sourceDirectory
-        ));
+        job.setDefinition(createPipelineWithSourceCode("STORE_LAST_BUILD", sourceDirectory));
         Run, ?> thirdBuild = buildSuccessfully(job);
         verifySourceCodeInBuild(thirdBuild, ACU_COBOL_PARSER);
         verifySourceCodeInBuild(firstBuild, NO_SOURCE_CODE); // should be still available
@@ -198,7 +177,7 @@ private SourceViewModel verifySourceModel(final Run, ?> build) {
 
     /** Freestyle job integration test for a simple build with code coverage. */
     @Test
-    public void coveragePluginFreestyleHelloWorld() {
+    void coveragePluginFreestyleHelloWorld() {
         FreeStyleProject project = createFreeStyleProject();
         copyFilesToWorkspace(project, FILE_NAME);
 
@@ -210,87 +189,8 @@ public void coveragePluginFreestyleHelloWorld() {
         verifySimpleCoverageNode(project);
     }
 
-    /** Integration test for a freestyle build with code coverage that runs on an agent. */
-    @Test
-    public void coverageFreeStyleOnAgent() throws IOException, InterruptedException {
-        assumeThat(isWindows()).as("Running on Windows").isFalse();
-
-        DumbSlave agent = createDockerContainerAgent(javaDockerRule.get());
-        FreeStyleProject project = createFreeStyleProject();
-        project.setAssignedNode(agent);
-
-        copySingleFileToAgentWorkspace(agent, project, FILE_NAME, FILE_NAME);
-        CoveragePublisher coveragePublisher = new CoveragePublisher();
-        JacocoReportAdapter jacocoReportAdapter = new JacocoReportAdapter(FILE_NAME);
-        coveragePublisher.setAdapters(Collections.singletonList(jacocoReportAdapter));
-        project.getPublishersList().add(coveragePublisher);
-
-        verifySimpleCoverageNode(project);
-    }
-
-    /** Integration test for a pipeline with code coverage that runs on an agent. */
-    @Test
-    public void coveragePipelineOnAgentNode() throws IOException, InterruptedException {
-        assumeThat(isWindows()).as("Running on Windows").isFalse();
-
-        DumbSlave agent = createDockerContainerAgent(javaDockerRule.get());
-        WorkflowJob project = createPipelineOnAgent();
-
-        copySingleFileToAgentWorkspace(agent, project, FILE_NAME, FILE_NAME);
-
-        verifySimpleCoverageNode(project);
-    }
-
-    private WorkflowJob createPipelineOnAgent() {
-        WorkflowJob job = createPipeline();
-        job.setDefinition(new CpsFlowDefinition("node('docker') {"
-                + "timestamps {\n"
-                + "    checkout([$class: 'GitSCM', "
-                + "        branches: [[name: '6bd346bbcc9779467ce657b2618ab11e38e28c2c' ]],\n"
-                + "        userRemoteConfigs: [[url: '" + "https://github.com/jenkinsci/analysis-model.git" + "']],\n"
-                + "        extensions: [[$class: 'RelativeTargetDirectory', \n"
-                + "                    relativeTargetDir: 'checkout']]])\n"
-                + "    publishCoverage adapters: [jacocoAdapter('" + FILE_NAME
-                + "')], sourceFileResolver: sourceFiles('STORE_ALL_BUILD')\n"
-                + "}"
-                + "}", true));
-
-        return job;
-    }
-
-    /**
-     * Creates a docker container agent.
-     *
-     * @param dockerContainer
-     *         the docker container of the agent
-     *
-     * @return A docker container agent.
-     */
-    @SuppressWarnings({"PMD.AvoidCatchingThrowable", "IllegalCatch"})
-    protected DumbSlave createDockerContainerAgent(final DockerContainer dockerContainer) {
-        try {
-            SystemCredentialsProvider.getInstance().getDomainCredentialsMap().put(Domain.global(),
-                    Collections.singletonList(
-                            new UsernamePasswordCredentialsImpl(CredentialsScope.SYSTEM, "dummyCredentialId",
-                                    null, "test", "test")
-                    )
-            );
-            DumbSlave agent = new DumbSlave("docker", "/home/test",
-                    new SSHLauncher(dockerContainer.ipBound(22), dockerContainer.port(22), "dummyCredentialId"));
-            agent.setNodeProperties(Collections.singletonList(new EnvironmentVariablesNodeProperty(
-                    new Entry("JAVA_HOME", "/usr/lib/jvm/java-8-openjdk-amd64/jre"))));
-            getJenkins().jenkins.addNode(agent);
-            getJenkins().waitOnline(agent);
-
-            return agent;
-        }
-        catch (Throwable e) {
-            throw new AssumptionViolatedException("Failed to create docker container", e);
-        }
-    }
-
     @SuppressWarnings("PMD.SystemPrintln")
-    private void verifySimpleCoverageNode(final ParameterizedJob, ?> project) {
+    void verifySimpleCoverageNode(final ParameterizedJob, ?> project) {
         Run, ?> build = buildSuccessfully(project);
         assertThat(build.getNumber()).isEqualTo(1);
 
@@ -299,5 +199,4 @@ private void verifySimpleCoverageNode(final ParameterizedJob, ?> project) {
                 .isEqualTo(new Coverage(6083, 6368 - 6083));
         System.out.println(getConsoleLog(build));
     }
-
 }
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoverageXmlStreamTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoverageXmlStreamTest.java
index c2c7c5adf..357e3c148 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoverageXmlStreamTest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/CoverageXmlStreamTest.java
@@ -21,7 +21,7 @@
  *
  * @author Ullrich Hafner
  */
-public class CoverageXmlStreamTest extends SerializableTest {
+class CoverageXmlStreamTest extends SerializableTest {
     @Override
     protected CoverageNode createSerializable() {
         // TODO: replace with actual result
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeclarativePipelineSupportITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeclarativePipelineSupportITest.java
index 0df9c3c46..ff09b475b 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeclarativePipelineSupportITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeclarativePipelineSupportITest.java
@@ -1,6 +1,6 @@
 package io.jenkins.plugins.coverage.model;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -13,14 +13,14 @@
 /**
  * Integration test to check if declarative pipelines are supported.
  */
-public class DeclarativePipelineSupportITest extends IntegrationTestWithJenkinsPerSuite {
+class DeclarativePipelineSupportITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_ANALYSIS_MODEL_XML = "jacoco-analysis-model.xml";
 
     /**
      * Check if code coverage is supported in declarative pipelines.
      */
     @Test
-    public void declarativePipelineSupportJacoco() {
+    void declarativePipelineSupportJacoco() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_XML);
 
         job.setDefinition(new CpsFlowDefinition("pipeline {\n"
@@ -40,7 +40,6 @@ public void declarativePipelineSupportJacoco() {
         assertThat(build.getAction(CoverageBuildAction.class).getLineCoverage())
                 .isEqualTo(new Coverage(6083, 6368 - 6083));
     }
-
 }
 
 
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeltaComputationVsReferenceBuildITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeltaComputationVsReferenceBuildITest.java
index 3d5afe142..2ccdc7748 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeltaComputationVsReferenceBuildITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DeltaComputationVsReferenceBuildITest.java
@@ -3,8 +3,8 @@
 import java.io.IOException;
 import java.util.Collections;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -24,8 +24,7 @@
 /**
  * Integration test for delta computation of reference builds.
  */
-public class DeltaComputationVsReferenceBuildITest extends IntegrationTestWithJenkinsPerSuite {
-
+class DeltaComputationVsReferenceBuildITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_ANALYSIS_MODEL_FILE = "jacoco-analysis-model.xml";
     private static final String JACOCO_CODINGSTYLE_FILE = "jacoco-codingstyle.xml";
 
@@ -37,9 +36,9 @@ public class DeltaComputationVsReferenceBuildITest extends IntegrationTestWithJe
      * @throws ClassNotFoundException
      *         when trying to recover coverage result
      */
-    @Ignore
+    @Disabled("Bug")
     @Test
-    public void freestyleProjectTryCreatingReferenceBuildWithDeltaComputation()
+    void freestyleProjectTryCreatingReferenceBuildWithDeltaComputation()
             throws IOException, ClassNotFoundException {
         FreeStyleProject project = createFreeStyleProjectWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_FILE);
 
@@ -108,7 +107,7 @@ private void verifyDeltaComputation(final Run, ?> firstBuild, final Run, ?>
      *         when trying to recover coverage result
      */
     @Test
-    public void pipelineCreatingReferenceBuildWithDeltaComputation() throws IOException, ClassNotFoundException {
+    void pipelineCreatingReferenceBuildWithDeltaComputation() throws IOException, ClassNotFoundException {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_ANALYSIS_MODEL_FILE);
         job.setDefinition(new CpsFlowDefinition("node {"
                 + "   publishCoverage adapters: [jacocoAdapter('" + JACOCO_ANALYSIS_MODEL_FILE
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerAndSourceCodeRenderingITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerAndSourceCodeRenderingITest.java
index 17e3d4cd5..84a65272a 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerAndSourceCodeRenderingITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerAndSourceCodeRenderingITest.java
@@ -4,26 +4,16 @@
 import java.util.Collections;
 import java.util.TreeMap;
 
-import org.junit.AssumptionViolatedException;
-import org.junit.Rule;
-import org.junit.Test;
-
-import com.cloudbees.plugins.credentials.CredentialsScope;
-import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
-import com.cloudbees.plugins.credentials.domains.Domain;
-import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
-import org.jenkinsci.test.acceptance.docker.DockerContainer;
-import org.jenkinsci.test.acceptance.docker.DockerRule;
 import hudson.model.FreeStyleProject;
 import hudson.model.HealthReport;
+import hudson.model.Node;
 import hudson.model.Run;
-import hudson.plugins.sshslaves.SSHLauncher;
-import hudson.slaves.DumbSlave;
-import hudson.slaves.EnvironmentVariablesNodeProperty;
-import hudson.slaves.EnvironmentVariablesNodeProperty.Entry;
 
 import io.jenkins.plugins.coverage.CoveragePublisher;
 import io.jenkins.plugins.coverage.adapter.JacocoReportAdapter;
@@ -33,27 +23,23 @@
 import static org.assertj.core.api.Assumptions.*;
 
 /**
- * Tests if source code Rendering and copying works with Docker and if freestyle-projects run successfully with Docker.
+ * Tests if source code copying and rendering and copying works on Docker agents.
  */
+@Testcontainers
 @SuppressWarnings("checkstyle:ClassDataAbstractionCoupling")
-public class DockerAndSourceCodeRenderingITest extends IntegrationTestWithJenkinsPerSuite {
+class DockerAndSourceCodeRenderingITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_ANALYSIS_MODEL_FILE = "jacoco-analysis-model.xml";
     private static final String COMMIT = "6bd346bbcc9779467ce657b2618ab11e38e28c2c";
     private static final String REPOSITORY = "https://github.com/jenkinsci/analysis-model.git";
+    @Container
+    private static final AgentContainer AGENT_CONTAINER = new AgentContainer();
 
-    /** Docker container for java-maven builds. Contains also git to check out from an SCM. */
-    @Rule
-    public DockerRule javaDockerRule = new DockerRule<>(JavaGitContainer.class);
-
-    /**
-     * Integration test for a pipeline with sourcecode that runs on an agent.
-     */
     @Test
-    public void copySourceCodeAndCodeRenderingPipelineOnAgent() throws IOException, InterruptedException {
+    void shouldCopyAndRenderSourceCodeAndRenderingInPipelineOnDockerAgent() {
         assumeThat(isWindows()).as("Running on Windows").isFalse();
 
-        DumbSlave agent = createDockerContainerAgent(javaDockerRule.get());
-        WorkflowJob project = createPipelineWithSCMandJacocoAdapter("node('docker')");
+        Node agent = createDockerAgent(AGENT_CONTAINER);
+        WorkflowJob project = createPipelineWithGitAndJacocoAdapter("node('" + DOCKER_AGENT_NAME + "')");
 
         copySingleFileToAgentWorkspace(agent, project, JACOCO_ANALYSIS_MODEL_FILE, JACOCO_ANALYSIS_MODEL_FILE);
 
@@ -62,23 +48,27 @@ public void copySourceCodeAndCodeRenderingPipelineOnAgent() throws IOException,
         verifySourceCode(build);
     }
 
-    /**
-     * Integration test for a pipeline with sourcecode.
-     */
     @Test
-    public void copySourceCodeAndCodeRenderingPipeline() {
-        WorkflowJob job = createPipelineWithSCMandJacocoAdapter("node");
-        Run, ?> build = verifyGitRepository(job);
+    void shouldCopyAndRenderSourceCodeAndRenderingInFreestyleJobOnAgent() throws IOException {
+        assumeThat(isWindows()).as("Running on Windows").isFalse();
 
-        verifySourceCode(build);
+        Node agent = createDockerAgent(AGENT_CONTAINER);
+        FreeStyleProject project = createFreeStyleProject();
+        project.setAssignedNode(agent);
+        copySingleFileToAgentWorkspace(agent, project, JACOCO_ANALYSIS_MODEL_FILE, JACOCO_ANALYSIS_MODEL_FILE);
+        CoveragePublisher coveragePublisher = new CoveragePublisher();
+        JacocoReportAdapter jacocoReportAdapter = new JacocoReportAdapter(JACOCO_ANALYSIS_MODEL_FILE);
+        coveragePublisher.setAdapters(Collections.singletonList(jacocoReportAdapter));
+        project.getPublishersList().add(coveragePublisher);
+        Run, ?> build = buildSuccessfully(project);
+
+        assertThat(build.getNumber()).isEqualTo(1);
+
+        CoverageBuildAction coverageResult = build.getAction(CoverageBuildAction.class);
+        assertThat(coverageResult.getLineCoverage())
+                .isEqualTo(new Coverage(6083, 6368 - 6083));
     }
 
-    /**
-     * Verifies sourcecode is present in project.
-     *
-     * @param build
-     *         job of the project
-     */
     private void verifySourceCode(final Run, ?> build) {
         CoverageNode root = new CoverageNode(CoverageMetric.MODULE, "top-level");
 
@@ -89,14 +79,6 @@ private void verifySourceCode(final Run, ?> build) {
         assertThat(action.getTarget()).extracting(CoverageViewModel::getOwner).isEqualTo(build);
     }
 
-    /**
-     * Verifies clone of repository by checking console log.
-     *
-     * @param workflowJob
-     *         job of the project
-     *
-     * @return build of {@link WorkflowJob}
-     */
     private Run, ?> verifyGitRepository(final WorkflowJob workflowJob) {
         Run, ?> build = buildSuccessfully(workflowJob);
 
@@ -109,38 +91,7 @@ private void verifySourceCode(final Run, ?> build) {
         return build;
     }
 
-    /**
-     * Creates a docker container agent.
-     *
-     * @param dockerContainer
-     *         the docker container of the agent
-     *
-     * @return A docker container agent.
-     */
-    @SuppressWarnings({"PMD.AvoidCatchingThrowable", "IllegalCatch"})
-    protected DumbSlave createDockerContainerAgent(final DockerContainer dockerContainer) {
-        try {
-            SystemCredentialsProvider.getInstance().getDomainCredentialsMap().put(Domain.global(),
-                    Collections.singletonList(
-                            new UsernamePasswordCredentialsImpl(CredentialsScope.SYSTEM, "dummyCredentialId",
-                                    null, "test", "test")
-                    )
-            );
-            DumbSlave agent = new DumbSlave("docker", "/home/test",
-                    new SSHLauncher(dockerContainer.ipBound(22), dockerContainer.port(22), "dummyCredentialId"));
-            agent.setNodeProperties(Collections.singletonList(new EnvironmentVariablesNodeProperty(
-                    new Entry("JAVA_HOME", "/usr/lib/jvm/java-8-openjdk-amd64/jre"))));
-            getJenkins().jenkins.addNode(agent);
-            getJenkins().waitOnline(agent);
-
-            return agent;
-        }
-        catch (Throwable e) {
-            throw new AssumptionViolatedException("Failed to create docker container", e);
-        }
-    }
-
-    private WorkflowJob createPipelineWithSCMandJacocoAdapter(final String node) {
+    private WorkflowJob createPipelineWithGitAndJacocoAdapter(final String node) {
         WorkflowJob job = createPipeline();
         job.setDefinition(new CpsFlowDefinition(node + " {"
                 + "    checkout([$class: 'GitSCM', "
@@ -154,33 +105,4 @@ private WorkflowJob createPipelineWithSCMandJacocoAdapter(final String node) {
 
         return job;
     }
-
-    /**
-     * Tests if freestyle project is running successfully in docker.
-     *
-     * @throws IOException
-     *         due to javaDockerRule.get()
-     * @throws InterruptedException
-     *         to setAssignedNode() to project
-     */
-    @Test
-    public void freestyleProjectCoverageOnAgentNode() throws IOException, InterruptedException {
-        assumeThat(isWindows()).as("Running on Windows").isFalse();
-
-        DumbSlave agent = createDockerContainerAgent(javaDockerRule.get());
-        FreeStyleProject project = createFreeStyleProject();
-        project.setAssignedNode(agent);
-        copySingleFileToAgentWorkspace(agent, project, JACOCO_ANALYSIS_MODEL_FILE, JACOCO_ANALYSIS_MODEL_FILE);
-        CoveragePublisher coveragePublisher = new CoveragePublisher();
-        JacocoReportAdapter jacocoReportAdapter = new JacocoReportAdapter(JACOCO_ANALYSIS_MODEL_FILE);
-        coveragePublisher.setAdapters(Collections.singletonList(jacocoReportAdapter));
-        project.getPublishersList().add(coveragePublisher);
-        Run, ?> build = buildSuccessfully(project);
-
-        assertThat(build.getNumber()).isEqualTo(1);
-
-        CoverageBuildAction coverageResult = build.getAction(CoverageBuildAction.class);
-        assertThat(coverageResult.getLineCoverage())
-                .isEqualTo(new Coverage(6083, 6368 - 6083));
-    }
 }
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerCoveragePluginSourceITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerCoveragePluginSourceITest.java
new file mode 100644
index 000000000..031fba352
--- /dev/null
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/DockerCoveragePluginSourceITest.java
@@ -0,0 +1,77 @@
+package io.jenkins.plugins.coverage.model;
+
+import java.io.IOException;
+import java.util.Collections;
+
+import org.junit.jupiter.api.Test;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
+import org.jenkinsci.plugins.workflow.job.WorkflowJob;
+import hudson.model.FreeStyleProject;
+import hudson.model.Node;
+
+import io.jenkins.plugins.coverage.CoveragePublisher;
+import io.jenkins.plugins.coverage.adapter.JacocoReportAdapter;
+
+import static org.assertj.core.api.Assumptions.*;
+
+/**
+ * Integration tests for the coverage API plugin.
+ *
+ * @author Ullrich Hafner
+ */
+@Testcontainers
+class DockerCoveragePluginSourceITest extends CoveragePluginSourceITest {
+    @Container
+    private static final AgentContainer AGENT_CONTAINER = new AgentContainer();
+
+    /** Integration test for a freestyle build with code coverage that runs on an agent. */
+    @Test
+    void coverageFreeStyleOnAgent() throws IOException {
+        assumeThat(isWindows()).as("Running on Windows").isFalse();
+
+        Node agent = createDockerAgent(AGENT_CONTAINER);
+        FreeStyleProject project = createFreeStyleProject();
+        project.setAssignedNode(agent);
+
+        copySingleFileToAgentWorkspace(agent, project, FILE_NAME, FILE_NAME);
+        CoveragePublisher coveragePublisher = new CoveragePublisher();
+        JacocoReportAdapter jacocoReportAdapter = new JacocoReportAdapter(FILE_NAME);
+        coveragePublisher.setAdapters(Collections.singletonList(jacocoReportAdapter));
+        project.getPublishersList().add(coveragePublisher);
+
+        verifySimpleCoverageNode(project);
+    }
+
+    /** Integration test for a pipeline with code coverage that runs on an agent. */
+    @Test
+    void coveragePipelineOnAgentNode() {
+        assumeThat(isWindows()).as("Running on Windows").isFalse();
+
+        Node agent = createDockerAgent(AGENT_CONTAINER);
+        WorkflowJob project = createPipelineOnAgent();
+
+        copySingleFileToAgentWorkspace(agent, project, FILE_NAME, FILE_NAME);
+
+        verifySimpleCoverageNode(project);
+    }
+
+    private WorkflowJob createPipelineOnAgent() {
+        WorkflowJob job = createPipeline();
+        job.setDefinition(new CpsFlowDefinition("node('" + DOCKER_AGENT_NAME + "') {"
+                + "timestamps {\n"
+                + "    checkout([$class: 'GitSCM', "
+                + "        branches: [[name: '6bd346bbcc9779467ce657b2618ab11e38e28c2c' ]],\n"
+                + "        userRemoteConfigs: [[url: '" + "https://github.com/jenkinsci/analysis-model.git" + "']],\n"
+                + "        extensions: [[$class: 'RelativeTargetDirectory', \n"
+                + "                    relativeTargetDir: 'checkout']]])\n"
+                + "    publishCoverage adapters: [jacocoAdapter('" + FILE_NAME
+                + "')], sourceFileResolver: sourceFiles('STORE_ALL_BUILD')\n"
+                + "}"
+                + "}", true));
+
+        return job;
+    }
+}
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/FailBuildIfCoverageDecreasesITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/FailBuildIfCoverageDecreasesITest.java
index 1eb378324..5d24bb291 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/FailBuildIfCoverageDecreasesITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/FailBuildIfCoverageDecreasesITest.java
@@ -3,7 +3,7 @@
 import java.io.IOException;
 import java.util.Collections;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -14,12 +14,10 @@
 import io.jenkins.plugins.coverage.adapter.CoberturaReportAdapter;
 import io.jenkins.plugins.util.IntegrationTestWithJenkinsPerSuite;
 
-enum CoverageDecreasedAction { FAIL_BUILD, DONT_FAIL_BUILD}
-
 /**
  * Integration test for checking if build failes when coverage decreases.
  */
-public class FailBuildIfCoverageDecreasesITest extends IntegrationTestWithJenkinsPerSuite {
+class FailBuildIfCoverageDecreasesITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String COBERTURA_HIGHER_COVERAGE = "cobertura-higher-coverage.xml";
     private static final String COBERTURA_LOWER_COVERAGE = "cobertura-lower-coverage.xml";
 
@@ -30,7 +28,7 @@ public class FailBuildIfCoverageDecreasesITest extends IntegrationTestWithJenkin
      *         if creating Project throws Exception
      */
     @Test
-    public void freestyleProjectTestBuildResultDependingOnFailBuildIfCoverageDecreases() throws IOException {
+    void freestyleProjectTestBuildResultDependingOnFailBuildIfCoverageDecreases() throws IOException {
         FreeStyleProject freestyleProjectIfDecreasesSetFailTrue = createFreestyleProjectWithDecreasedCoverage(
                 COBERTURA_HIGHER_COVERAGE,
                 COBERTURA_LOWER_COVERAGE, CoverageDecreasedAction.FAIL_BUILD);
@@ -46,7 +44,7 @@ public void freestyleProjectTestBuildResultDependingOnFailBuildIfCoverageDecreas
      * Integration test for pipeline projects for checking if build failes when coverage decreases.
      */
     @Test
-    public void pipelineProjectTestBuildResultDependingOnFailBuildIfCoverageDecreases() {
+    void pipelineProjectTestBuildResultDependingOnFailBuildIfCoverageDecreases() {
         WorkflowJob pipelineProjectIfDecreasesSetFailTrue = createPipelineProjectWithDecreasedCoverage(
                 COBERTURA_HIGHER_COVERAGE,
                 COBERTURA_LOWER_COVERAGE, CoverageDecreasedAction.FAIL_BUILD);
@@ -135,6 +133,7 @@ WorkflowJob createPipelineProjectWithDecreasedCoverage(final String filename,
         return job;
     }
 
+    enum CoverageDecreasedAction { FAIL_BUILD, DONT_FAIL_BUILD}
 }
 
 
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/HealthReportITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/HealthReportITest.java
index 29c230143..7d061ef6c 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/HealthReportITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/HealthReportITest.java
@@ -4,7 +4,7 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -20,16 +20,10 @@
 
 import static org.assertj.core.api.Assertions.*;
 
-/**
- * Enum for Thresholds being set or not to get different HealthReports in tests.
- */
-
-enum Thresholds { SET_THRESHOLDS_TO_RETURN_UNSTABLE_BUILD, DONT_SET_ANY_THRESHOLDS}
-
 /**
  * Integration Test for HealthReports.
  */
-public class HealthReportITest extends IntegrationTestWithJenkinsPerSuite {
+class HealthReportITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_FILE_NAME = "jacoco-analysis-model.xml";
     private static final int UNSTABLE_LINE_THRESHOLD = 100;
 
@@ -37,7 +31,7 @@ public class HealthReportITest extends IntegrationTestWithJenkinsPerSuite {
      * No Build should succeed, no thresholds set, HealthScore should be 100%.
      */
     @Test
-    public void freestyleProjectShouldReturnSuccess() {
+    void freestyleProjectShouldReturnSuccess() {
         FreeStyleProject project = createFreeStyleProject(Thresholds.DONT_SET_ANY_THRESHOLDS);
 
         Run, ?> build = buildWithResult(project, Result.SUCCESS);
@@ -49,7 +43,7 @@ public void freestyleProjectShouldReturnSuccess() {
      * Build should be unstable, thresholds set, HealthScore is 0%.
      */
     @Test
-    public void freestyleProjectShouldReturnUnstable() {
+    void freestyleProjectShouldReturnUnstable() {
         FreeStyleProject project = createFreeStyleProject(Thresholds.SET_THRESHOLDS_TO_RETURN_UNSTABLE_BUILD);
 
         Run, ?> build = buildWithResult(project, Result.UNSTABLE);
@@ -86,7 +80,7 @@ private FreeStyleProject createFreeStyleProject(final Thresholds thresholdsAppli
      * Build of pipeline project should succeed and HealthScore is 100%.
      */
     @Test
-    public void pipelineShouldReturnSuccess() {
+    void pipelineShouldReturnSuccess() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_FILE_NAME);
         job.setDefinition(new CpsFlowDefinition("node {"
                 + "   publishCoverage adapters: [jacocoAdapter('" + JACOCO_FILE_NAME + "')],"
@@ -102,7 +96,7 @@ public void pipelineShouldReturnSuccess() {
      * Build of pipeline project should be unstable and HealthScore is 0%.
      */
     @Test
-    public void pipelineShouldReturnUnstable() {
+    void pipelineShouldReturnUnstable() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_FILE_NAME);
         job.setDefinition(new CpsFlowDefinition("node {"
                 + "   publishCoverage adapters: [jacocoAdapter('" + JACOCO_FILE_NAME + "')],"
@@ -136,4 +130,10 @@ private void verifyHealthReportBasedOnHighOrNoThresholdsSet(final Run, ?> buil
             assertThat(healthReport.getIconUrl()).isEqualTo("health-00to19.png");
         }
     }
+
+    /**
+     * Enum for Thresholds being set or not to get different HealthReports in tests.
+     */
+
+    enum Thresholds { SET_THRESHOLDS_TO_RETURN_UNSTABLE_BUILD, DONT_SET_ANY_THRESHOLDS}
 }
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/JavaGitContainer.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/JavaGitContainer.java
deleted file mode 100644
index bb73203b1..000000000
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/JavaGitContainer.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package io.jenkins.plugins.coverage.model;
-
-import org.jenkinsci.test.acceptance.docker.DockerFixture;
-import org.jenkinsci.test.acceptance.docker.fixtures.SshdContainer;
-
-/**
- * Represents a server with SSHD, Java tooling, Maven and Git.
- *
- * @author Ullrich Hafner
- */
-@DockerFixture(id = "java-git", ports = {22, 8080})
-public class JavaGitContainer extends SshdContainer {
-    /**
-     * Creates a new instance of {@link JavaGitContainer}.
-     */
-    @SuppressWarnings("PMD.UnnecessaryConstructor")
-    public JavaGitContainer() {
-        super();
-
-        // required for dependency injection
-    }
-}
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/MultipleInvocationsOfStepITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/MultipleInvocationsOfStepITest.java
index 7fb5e135d..0b76a580d 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/MultipleInvocationsOfStepITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/MultipleInvocationsOfStepITest.java
@@ -2,8 +2,8 @@
 
 import java.util.List;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -17,7 +17,7 @@
 /**
  * Test multiple invocations of step.
  */
-public class MultipleInvocationsOfStepITest extends IntegrationTestWithJenkinsPerSuite {
+class MultipleInvocationsOfStepITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_LOWER_BRANCH_COVERAGE = "jacoco-analysis-model.xml";
     private static final String JACOCO_HIGHER_BRANCH_COVERAGE = "jacoco-codingstyle.xml";
     private static final int JACOCO_HIGHER_BRANCH_COVERAGE_COVERED_VALUE = 109;
@@ -29,7 +29,7 @@ public class MultipleInvocationsOfStepITest extends IntegrationTestWithJenkinsPe
      * Pipeline with multiple invocations of step, no tag set and higher coverage file first.
      */
     @Test
-    public void withoutTagFirstHigherFile() {
+    void withoutTagFirstHigherFile() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_LOWER_BRANCH_COVERAGE, JACOCO_HIGHER_BRANCH_COVERAGE);
 
         job.setDefinition(new CpsFlowDefinition("node {"
@@ -56,7 +56,7 @@ private List getCoverageBuildActions(final WorkflowJob job,
      * Pipeline with multiple invocations of step, no tag set and lower coverage file first.
      */
     @Test
-    public void withoutTagFirstLowerFile() {
+    void withoutTagFirstLowerFile() {
         WorkflowJob job = createPipelineWithWorkspaceFiles(JACOCO_LOWER_BRANCH_COVERAGE, JACOCO_HIGHER_BRANCH_COVERAGE);
 
         job.setDefinition(new CpsFlowDefinition("node {"
@@ -74,8 +74,8 @@ public void withoutTagFirstLowerFile() {
      * Pipeline with multiple invocations of step and tag set.
      */
     @Test
-    @Ignore
-    public void withDifferentTag() {
+    @Disabled("Bug")
+    void withDifferentTag() {
         WorkflowJob job = createPipelineWithAdaptersAndTags("t2");
 
         List buildAction = getCoverageBuildActions(job, 2);
@@ -91,7 +91,7 @@ public void withDifferentTag() {
      * Pipeline with multiple invocations of step and tag set.
      */
     @Test
-    public void witSameTag() {
+    void witSameTag() {
         WorkflowJob job = createPipelineWithAdaptersAndTags("t1");
 
         List buildAction = getCoverageBuildActions(job, 1);
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/PluginArchitectureTest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/PluginArchitectureTest.java
new file mode 100644
index 000000000..e09c8a548
--- /dev/null
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/PluginArchitectureTest.java
@@ -0,0 +1,61 @@
+package io.jenkins.plugins.coverage.model;
+
+import com.tngtech.archunit.junit.AnalyzeClasses;
+import com.tngtech.archunit.junit.ArchTest;
+import com.tngtech.archunit.lang.ArchRule;
+
+import edu.hm.hafner.util.ArchitectureRules;
+
+import io.jenkins.plugins.util.PluginArchitectureRules;
+
+/**
+ * Defines several architecture rules for the static analysis model and parsers.
+ *
+ * @author Ullrich Hafner
+ */
+@SuppressWarnings("hideutilityclassconstructor")
+@AnalyzeClasses(packages = "io.jenkins.plugins.coverage.model")
+class PluginArchitectureTest {
+    @ArchTest
+    static final ArchRule NO_EXCEPTIONS_WITH_NO_ARG_CONSTRUCTOR = ArchitectureRules.NO_EXCEPTIONS_WITH_NO_ARG_CONSTRUCTOR;
+
+    @ArchTest
+    static final ArchRule NO_PUBLIC_TEST_CLASSES = ArchitectureRules.NO_PUBLIC_TEST_CLASSES;
+
+    @ArchTest
+    static final ArchRule NO_PUBLIC_TEST_METHODS = ArchitectureRules.ONLY_PACKAGE_PRIVATE_TEST_METHODS;
+
+    @ArchTest
+    static final ArchRule NO_TEST_API_CALLED = ArchitectureRules.NO_TEST_API_CALLED;
+
+    @ArchTest
+    static final ArchRule NO_FORBIDDEN_ANNOTATION_USED = ArchitectureRules.NO_FORBIDDEN_ANNOTATION_USED;
+
+    @ArchTest
+    static final ArchRule NO_FORBIDDEN_CLASSES_CALLED = ArchitectureRules.NO_FORBIDDEN_CLASSES_CALLED;
+
+    @ArchTest
+    static final ArchRule NO_PUBLIC_ARCHITECTURE_TESTS = ArchitectureRules.NO_PUBLIC_ARCHITECTURE_TESTS;
+
+    @ArchTest
+    static final ArchRule NO_JENKINS_INSTANCE_CALL = PluginArchitectureRules.NO_JENKINS_INSTANCE_CALL;
+
+    @ArchTest
+    static final ArchRule NO_FORBIDDEN_PACKAGE_ACCESSED = PluginArchitectureRules.NO_FORBIDDEN_PACKAGE_ACCESSED;
+
+    @ArchTest
+    static final ArchRule AJAX_PROXY_METHOD_MUST_BE_IN_PUBLIC_CLASS = PluginArchitectureRules.AJAX_PROXY_METHOD_MUST_BE_IN_PUBLIC_CLASS;
+
+    @ArchTest
+    static final ArchRule DATA_BOUND_CONSTRUCTOR_MUST_BE_IN_PUBLIC_CLASS = PluginArchitectureRules.DATA_BOUND_CONSTRUCTOR_MUST_BE_IN_PUBLIC_CLASS;
+
+    @ArchTest
+    static final ArchRule DATA_BOUND_SETTER_MUST_BE_IN_PUBLIC_CLASS = PluginArchitectureRules.DATA_BOUND_SETTER_MUST_BE_IN_PUBLIC_CLASS;
+
+    @ArchTest
+    static final ArchRule USE_POST_FOR_VALIDATION_END_POINTS = PluginArchitectureRules.USE_POST_FOR_VALIDATION_END_POINTS;
+
+    @ArchTest
+    static final ArchRule USE_POST_FOR_LIST_MODELS_RULE = PluginArchitectureRules.USE_POST_FOR_LIST_AND_COMBOBOX_FILL;
+
+}
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/QualityGatesITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/QualityGatesITest.java
index ddb2b5a2e..87d177d03 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/QualityGatesITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/QualityGatesITest.java
@@ -4,7 +4,7 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -24,8 +24,7 @@
 /**
  * Integration test for QualityGates/thresholds being respected.
  */
-public class QualityGatesITest extends IntegrationTestWithJenkinsPerSuite {
-
+class QualityGatesITest extends IntegrationTestWithJenkinsPerSuite {
     private static final float NOT_ACHIEVED_UNHEALTHY_THRESHOLD = 99.9f;
     private static final float NOT_ACHIEVED_UNSTABLE_THRESHOLD = 99.9f;
     private static final float ACHIEVED_UNHEALTHY_THRESHOLD = 50f;
@@ -37,7 +36,7 @@ public class QualityGatesITest extends IntegrationTestWithJenkinsPerSuite {
      * Tests if when QualityGates being fulfilled, build returns success without failure message.
      */
     @Test
-    public void freeStyleShouldMeetQualityTargets() {
+    void freeStyleShouldMeetQualityTargets() {
         FreeStyleProject project = createFreeStyleProjectWithOneLineThresholds(ACHIEVED_UNHEALTHY_THRESHOLD,
                 ACHIEVED_UNSTABLE_THRESHOLD);
         buildWithSuccess(project);
@@ -47,7 +46,7 @@ public void freeStyleShouldMeetQualityTargets() {
      * Tests if when QualityGates for unstable not being fulfilled, build returns unstable with failure message.
      */
     @Test
-    public void freeStyleShouldNotMeetQualityTargets() {
+    void freeStyleShouldNotMeetQualityTargets() {
 
         FreeStyleProject project = createFreeStyleProjectWithOneLineThresholds(NOT_ACHIEVED_UNHEALTHY_THRESHOLD,
                 NOT_ACHIEVED_UNSTABLE_THRESHOLD);
@@ -99,7 +98,7 @@ List createThresholdsContainingOneLineThreshold(final float unhealthy
      * Tests if build succeeds, when line thresholds within range.
      */
     @Test
-    public void pipelineShouldMeetQualityTargets() {
+    void pipelineShouldMeetQualityTargets() {
         WorkflowJob job = createPipelineWithLineThreshold(ACHIEVED_UNHEALTHY_THRESHOLD, ACHIEVED_UNSTABLE_THRESHOLD);
         buildWithSuccess(job);
     }
@@ -108,7 +107,7 @@ public void pipelineShouldMeetQualityTargets() {
      * Tests if build is unstable, when line thresholds above coverage.
      */
     @Test
-    public void pipelineShouldNotMeetQualityTargets() {
+    void pipelineShouldNotMeetQualityTargets() {
 
         WorkflowJob job = createPipelineWithLineThreshold(NOT_ACHIEVED_UNHEALTHY_THRESHOLD,
                 NOT_ACHIEVED_UNSTABLE_THRESHOLD);
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/ReportAggregationITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/ReportAggregationITest.java
index c74be7c6a..d3e118cb1 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/ReportAggregationITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/ReportAggregationITest.java
@@ -4,8 +4,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -24,16 +24,10 @@
 
 import static org.assertj.core.api.Assertions.*;
 
-/**
- * Enum for setting adapter in freestyle and pipeline projects.
- */
-enum UsedAdapter { COBERTURA, JACOCO}
-
 /**
  * Integration test for report aggregation.
  */
-public class ReportAggregationITest extends IntegrationTestWithJenkinsPerSuite {
-
+class ReportAggregationITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String COBERTURA_LOWER_COVERAGE_XML = "cobertura-lower-coverage.xml";
     private static final String COBERTURA_LOTS_OF_DATA_XML = "cobertura-lots-of-data.xml";
 
@@ -49,7 +43,7 @@ public class ReportAggregationITest extends IntegrationTestWithJenkinsPerSuite {
      *         due to verifyJacocoReportAggregation()
      */
     @Test
-    public void freeStyleProjectCheckReportAggregationWithJacocoFiles() throws ClassNotFoundException, IOException {
+    void freeStyleProjectCheckReportAggregationWithJacocoFiles() throws ClassNotFoundException, IOException {
         FreeStyleProject project = createFreeStyleProjectWithSpecifiedAdapterAndFiles(UsedAdapter.JACOCO,
                 JACOCO_CODINGSTYLE_XML, JACOCO_ANALYSIS_MODEL_XML);
 
@@ -66,7 +60,7 @@ public void freeStyleProjectCheckReportAggregationWithJacocoFiles() throws Class
      *         due to verifyJacocoReportAggregation()
      */
     @Test
-    public void pipelineProjectCheckReportAggregationWithJacocoFiles() throws IOException, ClassNotFoundException {
+    void pipelineProjectCheckReportAggregationWithJacocoFiles() throws IOException, ClassNotFoundException {
         WorkflowJob job = createPipelineProjectWithSpecifiedAdapterAndFiles(UsedAdapter.JACOCO, JACOCO_CODINGSTYLE_XML,
                 JACOCO_ANALYSIS_MODEL_XML);
 
@@ -102,8 +96,8 @@ private void verifyJacocoReportAggregation(final Run, ?> build) throws IOExcep
      *         due to verifyJacocoReportAggregation()
      */
     @Test
-    @Ignore
-    public void freeStyleProjectCheckReportAggregationWithCoberturaFiles() throws IOException, ClassNotFoundException {
+    @Disabled("Bug")
+    void freeStyleProjectCheckReportAggregationWithCoberturaFiles() throws IOException, ClassNotFoundException {
         FreeStyleProject project = createFreeStyleProjectWithSpecifiedAdapterAndFiles(UsedAdapter.COBERTURA,
                 COBERTURA_LOWER_COVERAGE_XML, COBERTURA_LOTS_OF_DATA_XML);
         Run, ?> build = buildSuccessfully(project);
@@ -119,7 +113,7 @@ public void freeStyleProjectCheckReportAggregationWithCoberturaFiles() throws IO
      *         due to verifyCoberturaReportAggregation()
      */
     @Test
-    public void pipelineProjectCheckReportAggregationWithCoberturaFiles() throws IOException, ClassNotFoundException {
+    void pipelineProjectCheckReportAggregationWithCoberturaFiles() throws IOException, ClassNotFoundException {
         WorkflowJob job = createPipelineProjectWithSpecifiedAdapterAndFiles(UsedAdapter.COBERTURA,
                 COBERTURA_LOWER_COVERAGE_XML, COBERTURA_LOTS_OF_DATA_XML);
 
@@ -210,4 +204,9 @@ private WorkflowJob createPipelineProjectWithSpecifiedAdapterAndFiles(final Used
                 + "}", true));
         return job;
     }
+
+    /**
+     * Enum for setting adapter in freestyle and pipeline projects.
+     */
+    enum UsedAdapter { COBERTURA, JACOCO}
 }
diff --git a/plugin/src/test/java/io/jenkins/plugins/coverage/model/SkipPublishingOfChecksITest.java b/plugin/src/test/java/io/jenkins/plugins/coverage/model/SkipPublishingOfChecksITest.java
index ca141908e..7717e9bd7 100644
--- a/plugin/src/test/java/io/jenkins/plugins/coverage/model/SkipPublishingOfChecksITest.java
+++ b/plugin/src/test/java/io/jenkins/plugins/coverage/model/SkipPublishingOfChecksITest.java
@@ -2,7 +2,7 @@
 
 import java.util.Collections;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
 import org.jenkinsci.plugins.workflow.job.WorkflowJob;
@@ -15,22 +15,17 @@
 
 import static org.assertj.core.api.Assertions.*;
 
-/**
- * Enum to set skipping of publishing of checks.
- */
-enum Checks { PUBLISH_CHECKS, SKIP_CHECKS}
-
 /**
  * Tests if publishing of checks can be skipped.
  */
-public class SkipPublishingOfChecksITest extends IntegrationTestWithJenkinsPerSuite {
+class SkipPublishingOfChecksITest extends IntegrationTestWithJenkinsPerSuite {
     private static final String JACOCO_FILENAME = "jacoco-analysis-model.xml";
 
     /**
      * Tests publishing of checks in freestyle-project when skip publishing checks is false.
      */
     @Test
-    public void freeStylePublishingOfChecks() {
+    void freeStylePublishingOfChecks() {
         FreeStyleProject project = getFreeStyleProjectWithJacoco(Checks.PUBLISH_CHECKS);
         checkConsoleLog(buildSuccessfully(project), Checks.PUBLISH_CHECKS);
     }
@@ -39,7 +34,7 @@ public void freeStylePublishingOfChecks() {
      * Tests publishing of checks in pipeline-project when skip publishing checks is false.
      */
     @Test
-    public void pipelinePublishingOfChecks() {
+    void pipelinePublishingOfChecks() {
         WorkflowJob job = getPipelineProjectWithJacoco(Checks.PUBLISH_CHECKS);
         checkConsoleLog(buildSuccessfully(job), Checks.PUBLISH_CHECKS);
     }
@@ -48,7 +43,7 @@ public void pipelinePublishingOfChecks() {
      * Tests publishing of checks in freestyle-project is skipped when skip publishing checks is true.
      */
     @Test
-    public void freeStyleSkipPublishingOfChecks() {
+    void freeStyleSkipPublishingOfChecks() {
         FreeStyleProject project = getFreeStyleProjectWithJacoco(Checks.SKIP_CHECKS);
         checkConsoleLog(buildSuccessfully(project), Checks.SKIP_CHECKS);
     }
@@ -57,7 +52,7 @@ public void freeStyleSkipPublishingOfChecks() {
      * Tests publishing of checks in pipeline-project is skipped when skip publishing checks is true.
      */
     @Test
-    public void pipelineSkipPublishingOfChecks() {
+    void pipelineSkipPublishingOfChecks() {
         WorkflowJob job = getPipelineProjectWithJacoco(Checks.SKIP_CHECKS);
         checkConsoleLog(buildSuccessfully(job), Checks.SKIP_CHECKS);
     }
@@ -134,4 +129,8 @@ else if (skipPublishingChecks == Checks.PUBLISH_CHECKS) {
         return job;
     }
 
+    /**
+     * Enum to set skipping of publishing of checks.
+     */
+    enum Checks { PUBLISH_CHECKS, SKIP_CHECKS}
 }
diff --git a/plugin/src/test/resources/io/jenkins/plugins/coverage/model/JavaGitContainer/Dockerfile b/plugin/src/test/resources/io/jenkins/plugins/coverage/model/JavaGitContainer/Dockerfile
deleted file mode 100644
index cb82f6a31..000000000
--- a/plugin/src/test/resources/io/jenkins/plugins/coverage/model/JavaGitContainer/Dockerfile
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Container for running Java processes
-#
-
-# sha1sum ../SshdContainer/Dockerfile | cut -c 1-12
-FROM jenkins/sshd:32edfdd58111
-
-RUN apt-get update && \
-    apt-get install --no-install-recommends -y \
-        software-properties-common \
-        openjdk-8-jre-headless \
-        openjdk-8-jdk-headless \
-        curl \
-        ant \
-        maven \
-        git