From 6466a4b944d9bf437e539a516fc3805563741b3a Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Sat, 16 Dec 2023 08:14:33 +0100 Subject: [PATCH] #256: Avoid lenient mocks (#362) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #342: Restructure changelog * Apply suggestions from code review Co-authored-by: Christoph Pirkl * #342: Restructure changelog * #342: Updated versions. * #359: Improve logo transparency * #359: Updated version number and changelog. * #356: Fix warning in codeql-analysis.yml * Upgrade test dependencies * #246: Avoid configuring mocks as lenient * Fix warning under Java 17 OpenJDK 64-Bit Server VM warning: Ignoring option --illegal-access=deny; support was removed in 17.0 * Test with Java 19 * Fix integration test * Fix compiler warnings * Skip tests that require the SecurityManager Java 19ff does not support the SecurityManager any more. * Update release date --------- Co-authored-by: Sebastian Bär Co-authored-by: kaklakariada Co-authored-by: kaklakariada --- .github/workflows/build.yml | 2 +- .../api/core/TestLinkedSpecificationItem.java | 16 ++--- .../core/TestLinkedItemIndex.java | 14 ++-- .../core/TestLinkedSpecificationItem.java | 18 ++--- .../openfasttrace/core/TestOftRunner.java | 37 ++++------ .../openfasttrace/core/TestTracer.java | 14 ++-- .../core/cli/TestCliStarter.java | 8 +++ .../importer/TestImporterFactoryLoader.java | 10 ++- .../core/importer/TestMultiFileImporter.java | 18 ++--- doc/changes/changes_3.7.1.md | 6 +- .../tag/TestTagImporterWithConfig.java | 11 ++- .../importer/zip/ITZipFileImporter.java | 27 ++------ .../zip/TestZipFileImporterFactory.java | 4 +- parent/pom.xml | 2 - .../openfasttrace/cli/ITestCliWithFilter.java | 11 ++- .../openfasttrace/cli/TestCliExit.java | 12 +++- .../openfasttrace/cli/TestCliStarter.java | 10 ++- .../view/html/TestHtmlSpecificationItem.java | 13 ++-- .../plaintext/ConsoleColorFormatter.java | 2 +- .../report/plaintext/NullTextFormatter.java | 2 +- .../report/plaintext/TestPlainTextReport.java | 69 +++++++++---------- .../plaintext/TestTextFormatterFactory.java | 5 +- .../testutil/TestAssumptions.java | 31 +++++++++ .../importer/ImporterFactoryTestBase.java | 8 +-- 24 files changed, 170 insertions(+), 180 deletions(-) create mode 100644 testutil/src/main/java/org/itsallcode/openfasttrace/testutil/TestAssumptions.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 23ad98259..b20dff41b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: - os: ubuntu-latest java: 17 - os: ubuntu-latest - java: 18 + java: 19 concurrency: group: ${{ github.workflow }}-${{ github.ref }}-os-${{ matrix.os }}-java-${{ matrix.java }} diff --git a/api/src/test/java/org/itsallcode/openfasttrace/api/core/TestLinkedSpecificationItem.java b/api/src/test/java/org/itsallcode/openfasttrace/api/core/TestLinkedSpecificationItem.java index 421557651..78abeccd4 100644 --- a/api/src/test/java/org/itsallcode/openfasttrace/api/core/TestLinkedSpecificationItem.java +++ b/api/src/test/java/org/itsallcode/openfasttrace/api/core/TestLinkedSpecificationItem.java @@ -7,8 +7,7 @@ import static org.itsallcode.openfasttrace.api.core.SampleArtifactTypes.*; import static org.itsallcode.openfasttrace.api.core.SpecificationItemAssertions.*; import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.util.Arrays; import java.util.List; @@ -18,12 +17,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; // [utest->dsn~linked-specification-item~1] @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestLinkedSpecificationItem { private LinkedSpecificationItem linkedItem; @@ -39,10 +35,10 @@ public void prepareAllTests() this.linkedItem = new LinkedSpecificationItem(this.itemMock); this.coveredLinkedItem = new LinkedSpecificationItem(this.coveredItemMock); this.otherLinkedItem = new LinkedSpecificationItem(this.otherItemMock); - when(this.itemMock.getStatus()).thenReturn(ItemStatus.APPROVED); - when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("a~item~1")); - when(this.coveredItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~covered~1")); - when(this.otherItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~other~1")); + lenient().when(this.itemMock.getStatus()).thenReturn(ItemStatus.APPROVED); + lenient().when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("a~item~1")); + lenient().when(this.coveredItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~covered~1")); + lenient().when(this.otherItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~other~1")); } @Test @@ -136,7 +132,6 @@ private void prepareCoverThis() @Test void testGetDeepCoverageStatus_MissingCoverage() { - when(this.itemMock.getNeedsArtifactTypes()).thenReturn(Arrays.asList(DSN)); when(this.coveredItemMock.getNeedsArtifactTypes()).thenReturn(Arrays.asList(IMPL, UMAN)); this.linkedItem.addLinkToItemWithStatus(this.coveredLinkedItem, LinkStatus.COVERED_SHALLOW); assertItemDeepCoverageStatus(this.linkedItem, DeepCoverageStatus.UNCOVERED); @@ -247,7 +242,6 @@ void testGetTitleWithFallback_HasTitle() { final String expectedReturn = "title"; when(this.itemMock.getTitle()).thenReturn(expectedReturn); - when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("foo~wrong-return~1")); assertThat(this.linkedItem.getTitleWithFallback(), equalTo(expectedReturn)); } diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedItemIndex.java b/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedItemIndex.java index a864b24e8..ed0f3a1f7 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedItemIndex.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedItemIndex.java @@ -1,10 +1,9 @@ package org.itsallcode.openfasttrace.core; import static java.util.Arrays.asList; -import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.lenient; import org.itsallcode.openfasttrace.api.core.*; import org.itsallcode.openfasttrace.core.LinkedItemIndex.SpecificationItemIdWithoutVersion; @@ -13,13 +12,10 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; import nl.jqno.equalsverifier.EqualsVerifier; @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestLinkedItemIndex { private final static SpecificationItemId DUPLICATE_ID_1 = SpecificationItemId.createId("type", @@ -38,10 +34,10 @@ class TestLinkedItemIndex @BeforeEach public void prepareTest() { - when(this.duplicateIdItem1Mock.getId()).thenReturn(DUPLICATE_ID_1); - when(this.duplicateIdItem2Mock.getId()).thenReturn(DUPLICATE_ID_2); - when(this.uniqueIdItemMock.getId()).thenReturn(UNIQUE_ID); - when(this.duplicateIdIgnoringVersionItemMock.getId()) + lenient().when(this.duplicateIdItem1Mock.getId()).thenReturn(DUPLICATE_ID_1); + lenient().when(this.duplicateIdItem2Mock.getId()).thenReturn(DUPLICATE_ID_2); + lenient().when(this.uniqueIdItemMock.getId()).thenReturn(UNIQUE_ID); + lenient().when(this.duplicateIdIgnoringVersionItemMock.getId()) .thenReturn(DUPLICATE_ID_INGORING_VERSION); } diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedSpecificationItem.java b/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedSpecificationItem.java index ed7e684f0..2cee0e130 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedSpecificationItem.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/TestLinkedSpecificationItem.java @@ -7,8 +7,7 @@ import static org.itsallcode.openfasttrace.core.SpecificationItemAssertions.*; import static org.itsallcode.openfasttrace.testutil.core.SampleArtifactTypes.*; import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.util.Arrays; import java.util.List; @@ -19,12 +18,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; // [utest->dsn~linked-specification-item~1] @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestLinkedSpecificationItem { private LinkedSpecificationItem linkedItem; @@ -40,10 +36,10 @@ public void prepareAllTests() this.linkedItem = new LinkedSpecificationItem(this.itemMock); this.coveredLinkedItem = new LinkedSpecificationItem(this.coveredItemMock); this.otherLinkedItem = new LinkedSpecificationItem(this.otherItemMock); - when(this.itemMock.getStatus()).thenReturn(ItemStatus.APPROVED); - when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("a~item~1")); - when(this.coveredItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~covered~1")); - when(this.otherItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~other~1")); + lenient().when(this.itemMock.getStatus()).thenReturn(ItemStatus.APPROVED); + lenient().when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("a~item~1")); + lenient().when(this.coveredItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~covered~1")); + lenient().when(this.otherItemMock.getId()).thenReturn(SpecificationItemId.parseId("a~other~1")); } @Test @@ -129,7 +125,7 @@ void testGetDeepCoverageStatus_Covered() private void prepareCoverThis() { when(this.itemMock.getNeedsArtifactTypes()).thenReturn(Arrays.asList(IMPL)); - when(this.itemMock.getArtifactType()).thenReturn(DSN); + lenient().when(this.itemMock.getArtifactType()).thenReturn(DSN); when(this.coveredItemMock.getArtifactType()).thenReturn(IMPL); this.linkedItem.addLinkToItemWithStatus(this.coveredLinkedItem, LinkStatus.COVERED_SHALLOW); } @@ -138,7 +134,6 @@ private void prepareCoverThis() @Test void testGetDeepCoverageStatus_MissingCoverage() { - when(this.itemMock.getNeedsArtifactTypes()).thenReturn(Arrays.asList(DSN)); when(this.coveredItemMock.getNeedsArtifactTypes()).thenReturn(Arrays.asList(IMPL, UMAN)); this.linkedItem.addLinkToItemWithStatus(this.coveredLinkedItem, LinkStatus.COVERED_SHALLOW); assertItemDeepCoverageStatus(this.linkedItem, DeepCoverageStatus.UNCOVERED); @@ -249,7 +244,6 @@ void testGetTitleWithFallback_HasTitle() { final String expectedReturn = "title"; when(this.itemMock.getTitle()).thenReturn(expectedReturn); - when(this.itemMock.getId()).thenReturn(SpecificationItemId.parseId("foo~wrong-return~1")); assertThat(this.linkedItem.getTitleWithFallback(), equalTo(expectedReturn)); } diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/TestOftRunner.java b/core/src/test/java/org/itsallcode/openfasttrace/core/TestOftRunner.java index 90b4d6f1b..74d26925c 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/TestOftRunner.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/TestOftRunner.java @@ -1,14 +1,12 @@ package org.itsallcode.openfasttrace.core; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.sameInstance; +import static org.hamcrest.Matchers.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.same; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import java.nio.file.Path; import java.nio.file.Paths; @@ -17,9 +15,7 @@ import org.itsallcode.openfasttrace.api.ReportSettings; import org.itsallcode.openfasttrace.api.core.*; -import org.itsallcode.openfasttrace.api.importer.ImportSettings; -import org.itsallcode.openfasttrace.api.importer.ImporterService; -import org.itsallcode.openfasttrace.api.importer.MultiFileImporter; +import org.itsallcode.openfasttrace.api.importer.*; import org.itsallcode.openfasttrace.core.exporter.ExporterService; import org.itsallcode.openfasttrace.core.report.ReportService; import org.junit.jupiter.api.BeforeEach; @@ -28,11 +24,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestOftRunner { private static final Path PATH = Paths.get("myPath"); @@ -66,20 +59,20 @@ void setUp() oftRunner = new OftRunner(serviceFactoryMock); - when(serviceFactoryMock.createImporterService(any())).thenReturn(importerServiceMock); - when(importerServiceMock.createImporter()).thenReturn(multiFileImporterMock); - when(multiFileImporterMock.importAny(any())).thenReturn(multiFileImporterMock); - when(multiFileImporterMock.getImportedItems()).thenReturn(importedItems); + lenient().when(serviceFactoryMock.createImporterService(any())).thenReturn(importerServiceMock); + lenient().when(importerServiceMock.createImporter()).thenReturn(multiFileImporterMock); + lenient().when(multiFileImporterMock.importAny(any())).thenReturn(multiFileImporterMock); + lenient().when(multiFileImporterMock.getImportedItems()).thenReturn(importedItems); - when(serviceFactoryMock.createLinker(same(importedItems))).thenReturn(linkerMock); - when(linkerMock.link()).thenReturn(linkedItems); + lenient().when(serviceFactoryMock.createLinker(same(importedItems))).thenReturn(linkerMock); + lenient().when(linkerMock.link()).thenReturn(linkedItems); - when(serviceFactoryMock.createTracer()).thenReturn(tracerMock); - when(tracerMock.trace(same(linkedItems))).thenReturn(traceMock); + lenient().when(serviceFactoryMock.createTracer()).thenReturn(tracerMock); + lenient().when(tracerMock.trace(same(linkedItems))).thenReturn(traceMock); - when(serviceFactoryMock.createExporterService()).thenReturn(exporterServiceMock); + lenient().when(serviceFactoryMock.createExporterService()).thenReturn(exporterServiceMock); - when(serviceFactoryMock.createReportService(any())).thenReturn(reportServiceMock); + lenient().when(serviceFactoryMock.createReportService(any())).thenReturn(reportServiceMock); } @Test @@ -92,7 +85,7 @@ void testImportItemsWithDefaultImportSettings() assertDefaultSettings(arg.getValue()); } - private void assertDefaultSettings(ImportSettings actual) + private void assertDefaultSettings(final ImportSettings actual) { assertThat(actual.getFilters().isAnyCriteriaSet(), is(false)); assertThat(actual.getFilters().isArtifactTypeCriteriaSet(), is(false)); @@ -129,7 +122,7 @@ void testExportToPathListOfSpecificationItemPath() assertDefaultExportSettings(arg.getValue()); } - private void assertDefaultExportSettings(ExportSettings settings) + private void assertDefaultExportSettings(final ExportSettings settings) { assertThat(settings.getNewline(), equalTo(Newline.UNIX)); assertThat(settings.getOutputFormat(), equalTo("specobject")); diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/TestTracer.java b/core/src/test/java/org/itsallcode/openfasttrace/core/TestTracer.java index e4bc0bf1e..7990199e7 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/TestTracer.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/TestTracer.java @@ -5,23 +5,19 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.jupiter.api.Assertions.assertAll; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; import java.util.Arrays; -import org.itsallcode.openfasttrace.api.core.LinkedSpecificationItem; -import org.itsallcode.openfasttrace.api.core.SpecificationItemId; -import org.itsallcode.openfasttrace.api.core.Trace; +import org.itsallcode.openfasttrace.api.core.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestTracer { private static final SpecificationItemId ID_A = SpecificationItemId.parseId("req~a~1"); @@ -34,9 +30,9 @@ class TestTracer @BeforeEach public void prepareTest() { - when(this.aMock.getId()).thenReturn(ID_A); - when(this.bMock.getId()).thenReturn(ID_B); - when(this.cMock.getId()).thenReturn(ID_C); + lenient().when(this.aMock.getId()).thenReturn(ID_A); + lenient().when(this.bMock.getId()).thenReturn(ID_B); + lenient().when(this.cMock.getId()).thenReturn(ID_C); } @Test diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/cli/TestCliStarter.java b/core/src/test/java/org/itsallcode/openfasttrace/core/cli/TestCliStarter.java index 667bddd1a..b43088737 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/cli/TestCliStarter.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/cli/TestCliStarter.java @@ -7,12 +7,20 @@ import org.itsallcode.junit.sysextensions.AssertExit; import org.itsallcode.junit.sysextensions.ExitGuard; import org.itsallcode.openfasttrace.api.exporter.ExporterException; +import org.itsallcode.openfasttrace.testutil.TestAssumptions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(ExitGuard.class) class TestCliStarter { + @BeforeAll + static void assumeSecurityManagerSupported() + { + TestAssumptions.assumeSecurityManagerSupported(); + } + @Test void testRunWithoutArguments() { diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestImporterFactoryLoader.java b/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestImporterFactoryLoader.java index d1c1ea129..5979e4d5d 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestImporterFactoryLoader.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestImporterFactoryLoader.java @@ -5,6 +5,7 @@ import static org.hamcrest.Matchers.sameInstance; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.same; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; import java.nio.file.Paths; @@ -19,14 +20,11 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; /** * Test for {@link ImporterFactoryLoader} */ @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestImporterFactoryLoader { @Mock @@ -49,9 +47,9 @@ void beforeEach() this.loader = new ImporterFactoryLoader(this.serviceLoaderMock); this.file = RealFileInput.forPath(Paths.get("dir", "name")); - when(this.supportedFactory1.supportsFile(same(this.file))).thenReturn(true); - when(this.supportedFactory2.supportsFile(same(this.file))).thenReturn(true); - when(this.unsupportedFactory.supportsFile(same(this.file))).thenReturn(false); + lenient().when(this.supportedFactory1.supportsFile(same(this.file))).thenReturn(true); + lenient().when(this.supportedFactory2.supportsFile(same(this.file))).thenReturn(true); + lenient().when(this.unsupportedFactory.supportsFile(same(this.file))).thenReturn(false); } @Test diff --git a/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestMultiFileImporter.java b/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestMultiFileImporter.java index 325a7ecb9..61759fb0a 100644 --- a/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestMultiFileImporter.java +++ b/core/src/test/java/org/itsallcode/openfasttrace/core/importer/TestMultiFileImporter.java @@ -5,15 +5,11 @@ import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.same; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import org.itsallcode.openfasttrace.api.core.SpecificationItem; import org.itsallcode.openfasttrace.api.importer.*; @@ -24,11 +20,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestMultiFileImporter { private static final Path FOLDER = Paths.get("src/test/resources/markdown"); @@ -53,9 +46,10 @@ void beforeEach() this.multiFileImporter = new MultiFileImporterImpl(this.specItemBuilderMock, this.factoryLoaderMock); - when(this.factoryLoaderMock.supportsFile(any())).thenReturn(true); - when(this.factoryLoaderMock.getImporterFactory(any())).thenReturn(Optional.of(this.importerFactoryMock)); - when(this.importerFactoryMock.createImporter(any(), same(this.specItemBuilderMock))) + lenient().when(this.factoryLoaderMock.supportsFile(any())).thenReturn(true); + lenient().when(this.factoryLoaderMock.getImporterFactory(any())) + .thenReturn(Optional.of(this.importerFactoryMock)); + lenient().when(this.importerFactoryMock.createImporter(any(), same(this.specItemBuilderMock))) .thenReturn(this.importerMock); } diff --git a/doc/changes/changes_3.7.1.md b/doc/changes/changes_3.7.1.md index fbcea750c..b77d26f6d 100644 --- a/doc/changes/changes_3.7.1.md +++ b/doc/changes/changes_3.7.1.md @@ -1,4 +1,4 @@ -# OpenFastTrace 3.7.1, released 2023-01-05 +# OpenFastTrace 3.7.1, released 2023-12-16 Code name: Bugfixes on top of 3.7.0 @@ -12,3 +12,7 @@ This release fixes a couple of little bugs: * #359: Fixed transparency in the "O" of the OFT logo * #356: Fixed warning in CI build + +## Refactoring + +* #256: Refactored unit tests to avoid lenient mocks where possible diff --git a/importer/tag/src/test/java/org/itsallcode/openfasttrace/importer/tag/TestTagImporterWithConfig.java b/importer/tag/src/test/java/org/itsallcode/openfasttrace/importer/tag/TestTagImporterWithConfig.java index 72feda84c..1f3a7c8a7 100644 --- a/importer/tag/src/test/java/org/itsallcode/openfasttrace/importer/tag/TestTagImporterWithConfig.java +++ b/importer/tag/src/test/java/org/itsallcode/openfasttrace/importer/tag/TestTagImporterWithConfig.java @@ -21,12 +21,9 @@ import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; // [utest->dsn~import.short-coverage-tag~1] @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class TestTagImporterWithConfig { private static final String COVERED_ITEM_NAME1 = "covered_name1"; @@ -47,10 +44,10 @@ class TestTagImporterWithConfig void beforeEach() { this.inOrderListener = inOrder(this.listenerMock); - when(this.configMock.getCoveredItemArtifactType()).thenReturn(COVERED_ITEM_TYPE); - when(this.configMock.getCoveredItemNamePrefix()).thenReturn(null); - when(this.configMock.getTagArtifactType()).thenReturn(COVERING_ITEM_TYPE); - when(this.configMock.getCoveredItemNamePrefix()).thenReturn(null); + lenient().when(this.configMock.getCoveredItemArtifactType()).thenReturn(COVERED_ITEM_TYPE); + lenient().when(this.configMock.getCoveredItemNamePrefix()).thenReturn(null); + lenient().when(this.configMock.getTagArtifactType()).thenReturn(COVERING_ITEM_TYPE); + lenient().when(this.configMock.getCoveredItemNamePrefix()).thenReturn(null); } @Test diff --git a/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/ITZipFileImporter.java b/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/ITZipFileImporter.java index 04d463baf..fd22493e0 100644 --- a/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/ITZipFileImporter.java +++ b/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/ITZipFileImporter.java @@ -3,22 +3,12 @@ import static java.util.Collections.emptyList; import static java.util.stream.Collectors.joining; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; -import static org.mockito.Mockito.when; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.StringReader; +import static org.mockito.Mockito.*; + +import java.io.*; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.ArrayList; @@ -35,15 +25,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; +import org.mockito.*; import org.mockito.junit.jupiter.MockitoExtension; -import org.mockito.junit.jupiter.MockitoSettings; -import org.mockito.quality.Strictness; @ExtendWith(MockitoExtension.class) -@MockitoSettings(strictness = Strictness.LENIENT) class ITZipFileImporter { private static final String FILE_CONTENT_STRING = "file content 1\nabcöäüßÖÄÜ!\"§$%&/()=?`´'#+*~-_,.;:<>|^°"; @@ -67,7 +52,7 @@ void beforeEach(@TempDir final Path tempDir) this.actualFileContent = new ArrayList<>(); this.zipFile = tempDir.resolve("test.zip").toFile(); this.zipOutputStream = null; - when(this.delegateImporterMock.importFile(any())).thenAnswer(invocation -> { + lenient().when(this.delegateImporterMock.importFile(any())).thenAnswer(invocation -> { final InputFile inputFile = invocation.getArgument(0); this.actualFileContent.add(inputFile.createReader().lines().collect(joining("\n"))); return null; diff --git a/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/TestZipFileImporterFactory.java b/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/TestZipFileImporterFactory.java index a7f54ba30..e2609afbd 100644 --- a/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/TestZipFileImporterFactory.java +++ b/importer/zip/src/test/java/org/itsallcode/openfasttrace/importer/zip/TestZipFileImporterFactory.java @@ -4,7 +4,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.lenient; import java.util.List; @@ -22,7 +22,7 @@ class TestZipFileImporterFactory extends ImporterFactoryTestBase ${test.args} - --illegal-access=deny ${test.args} - --illegal-access=deny