From c6debcf998629975f3f59e464cb2a05495b2fe73 Mon Sep 17 00:00:00 2001 From: bsmahi Date: Thu, 28 Mar 2024 19:43:20 +0530 Subject: [PATCH 1/2] Upgraded to Junit 5 and Refactored --- .gitignore | 1 + MigrateToLatestJunit.md | 817 ++++++++++++++++++ pom.xml | 46 +- .../com/clarity/business/ClientBOTest.java | 32 +- .../business/ClientBOTestRefactored.java | 24 +- ...odoBusinessImplMockitoInjectMocksTest.java | 12 +- .../TodoBusinessImplMockitoRulesTest.java | 15 +- .../business/TodoBusinessImplMockitoTest.java | 6 +- .../business/TodoBusinessImplStubTest.java | 6 +- .../junit/helper/ArraysCompareTest.java | 21 +- .../in28minutes/junit/helper/ArraysTest.java | 11 +- .../junit/helper/QuickBeforeAfterTest.java | 28 +- .../helper/StringHelperParameterizedTest.java | 21 +- .../junit/helper/StringHelperTest.java | 12 +- .../junit/suite/DummyTestSuite.java | 10 +- .../in28minutes/mockito/FirstMockitoTest.java | 4 +- .../mockito/HamcrestMatcherTest.java | 2 +- .../com/in28minutes/mockito/ListTest.java | 19 +- .../java/com/in28minutes/mockito/SpyTest.java | 20 +- .../MockitoMockingStaticMethodTest.java | 37 + .../PowerMockitoMockingConstructorTest.java | 43 - .../PowerMockitoMockingStaticMethodTest.java | 49 -- .../PowerMockitoTestingPrivateMethodTest.java | 20 +- 23 files changed, 1010 insertions(+), 246 deletions(-) create mode 100644 MigrateToLatestJunit.md create mode 100644 src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java delete mode 100644 src/test/java/com/in28minutes/powermock/PowerMockitoMockingConstructorTest.java delete mode 100644 src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java diff --git a/.gitignore b/.gitignore index 0c4ca8e..046a0aa 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ target # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +*.idea diff --git a/MigrateToLatestJunit.md b/MigrateToLatestJunit.md new file mode 100644 index 0000000..5fab860 --- /dev/null +++ b/MigrateToLatestJunit.md @@ -0,0 +1,817 @@ +# Steps for Upgrading to Junit5 + +## Step1: Replace the following with Junit5 and `mockito-all` with `mockito-inline` + +**AS-IS** + +```xml + + + junit + junit + 4.12 + test + + + org.mockito + mockito-all + 1.10.19 + test + + +``` +**TO-BE** + +```xml + + + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + + + org.mockito + mockito-inline + 3.6.0 + test + + + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 + test + + + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + +``` +## Step2: Upgrade Java Compiler Version with the latest one under build section + +**AS-IS** +```xml + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + +``` +> `` and `` has been replaced with `` tag + +**TO-BE** +```xml + + + + org.apache.maven.plugins + maven-compiler-plugin + + 21 + + + + +``` + +## Step3: Changes in `ArraysCompareTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.*; + +import org.junit.Test; +``` + +**TO-BE** +```java +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +``` + +### MethodName : testArraySort_NullArray + +**AS-IS** + +```java +@Test(expected=NullPointerException.class) +public void testArraySort_NullArray() { + int[] numbers = null; + Arrays.sort(numbers); +} +``` +###### Refactored using `assertThrows` and functional approach +**TO-BE** +```java +@Test +public void testArraySort_NullArray() { + assertThrows(NullPointerException.class, () -> { + int[] numbers = null; + Arrays.sort(numbers); + }); +} +``` + +### MethodName : testSort_Performance + +**AS-IS** + +```java +@Test(timeout=100) +``` +**TO-BE** +##### Added using `@TimeOut` annotation +```java +@Test +@Timeout(value = 100) +``` + +## Step4: Changes in `ArraysTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import org.junit.Test; +``` +**TO-BE** + +```java +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +``` +### MethodName : testPerformance + +**AS-IS** + +```java +@Test(timeout=100) +``` +**TO-BE** +##### Added using `@TimeOut` annotation +```java +@Test +@Timeout(value = 100) +``` + +## Step4: Changes in `ClientBOTest` class +Qualified PackageName has been changed + +**AS-IS** +```java +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import org.junit.Test; +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; +``` + +### MethodName : testClientProductSum1 + +**AS-IS** + +```java +@Test(expected = DifferentCurrenciesException.class) +public void testClientProductSum1() throws DifferentCurrenciesException { + + List products = new ArrayList(); + + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); + + @SuppressWarnings("unused") + Amount temp = null; + + temp = clientBO.getClientProductsSum(products); +} +``` +**TO-BE** +###### Refactored using `assertThrows` and functional approach + +```java +@Test +public void testClientProductSum1() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { + + List products = new ArrayList(); + + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); + + @SuppressWarnings("unused") + Amount temp = null; + + temp = clientBO.getClientProductsSum(products); + }); +} +``` + +## Step5: Changes in `ClientBOTestRefactored` class +Qualified PackageName has been changed + +**AS-IS** +```java +import static org.junit.Assert.assertEquals; +``` +**TO-BE** +```java +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; // Newly Added + +import org.junit.jupiter.api.Test; +``` + +### MethodName : `testClientProductSum_DifferentCurrencies_ThrowsException` + +**AS-IS** + +```java +@Test(expected = DifferentCurrenciesException.class) +public void testClientProductSum_DifferentCurrencies_ThrowsException() + throws DifferentCurrenciesException { + + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE) }; + + List products = createProductListWithAmounts(amounts); + + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + +} +``` +**TO-BE** +###### Refactored using `assertThrows` and functional approach + +```java +@Test +public void testClientProductSum_DifferentCurrencies_ThrowsException() + throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { + + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE)}; + + List products = createProductListWithAmounts(amounts); + + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + + }); + +} +``` + +## Step6: Changes in `DummyTestSuite` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; +``` +**TO-BE** + +```java +import org.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; +``` + +**AS-IS** + +```java +@RunWith(Suite.class) +@SuiteClasses({ArraysTest.class,StringHelperTest.class}) +``` +**TO-BE** + +```java +@Suite +@SelectClasses({ArraysTest.class,StringHelperTest.class}) +``` + +## Step6: Changes in `FirstMockitoTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; +``` + +## Step7: Changes in `HamcrestMatcherTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import org.junit.Test; +``` +**TO-BE** + +```java +import org.junit.jupiter.api.Test; +``` + +## Step8: Changes in `ListTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +import org.junit.Test; +``` +**TO-BE** + +```java +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; +``` + +### MethodName : `letsMockListGetToThrowException` + +**AS-IS** + +```java +@Test(expected = RuntimeException.class) +public void letsMockListGetToThrowException() { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); +} +``` +**TO-BE** +###### Refactored using `assertThrows` and functional approach + +```java +@Test +public void letsMockListGetToThrowException() { + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); +} +``` + +## Step9: Changes in `PowerMockitoMockingStaticMethodTest` class +#### Class Name `PowerMockitoMockingStaticMethodTest` has been changed to `MockitoMockingStaticMethodTest` + +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; +``` + +**AS-IS** +```java +@RunWith(PowerMockRunner.class) +@PrepareForTest({ UtilityClass.class /*The class with static method to be mocked*/}) +``` +**TO-BE** + +```java +@ExtendWith(MockitoExtension.class) +``` +### MethodName : `powerMockito_MockingAStaticMethodCall` + +**AS-IS** + +```java +@Test +public void powerMockito_MockingAStaticMethodCall() { + + when(dependencyMock.retrieveAllStats()).thenReturn( + Arrays.asList(1, 2, 3)); + + PowerMockito.mockStatic(UtilityClass.class); + + when(UtilityClass.staticMethod(anyLong())).thenReturn(150); + + assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); + + //To verify a specific method call + //First : Call PowerMockito.verifyStatic() + //Second : Call the method to be verified + PowerMockito.verifyStatic(); + UtilityClass.staticMethod(1 + 2 + 3); + + // verify exact number of calls + //PowerMockito.verifyStatic(Mockito.times(1)); + +} +``` +**TO-BE** +###### Refactored using `mockStatic` and functional approach + +```java +@Test +public void powerMockito_MockingAStaticMethodCall() { + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); + + MockedStatic mockedStatic = mockStatic(UtilityClass.class); + + mockedStatic.when(() -> UtilityClass.staticMethod(anyLong())).thenReturn(150); + + assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); + + mockedStatic.verify(() -> UtilityClass.staticMethod(1 + 2 + 3), times(1)); +} +``` +## Step10: Changes in `PowerMockitoTestingPrivateMethodTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.lang.reflect.Method; // Added + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.junit.jupiter.MockitoExtension; +``` + +**AS-IS** +```java +@RunWith(PowerMockRunner.class) +``` +**TO-BE** + +```java +@ExtendWith(MockitoExtension.class) +``` + +### MethodName : `powerMockito_MockingAStaticMethodCall` + +**AS-IS** +```java +when(dependencyMock.retrieveAllStats()).thenReturn( + Arrays.asList(1, 2, 3)); +long value = (Long) Whitebox.invokeMethod(systemUnderTest, + "privateMethodUnderTest"); +assertEquals(6, value); +``` +**TO-BE** + +```java +Method method = systemUnderTest.getClass().getDeclaredMethod("privateMethodUnderTest"); +method.setAccessible(true); +when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); +long value = (Long) method.invoke(systemUnderTest); +assertEquals(6, value); +``` +## Step11: Changes in `QuickBeforeAfterTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +``` +**TO-BE** + +```java +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +``` + +### Annotations used in this class has been changed from + +* @BeforeClass > @BeforeAll +* @Before > @BeforeEach +* @After > @AfterEach +* @AfterClass > @AfterAll + +## Step12: Changes in `SpyTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertEquals; + +import static org.mockito.Mockito.stub; // Removed + +import org.junit.Test; + +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +``` + +### Removed method name `creatingASpyOnArrayList_overridingSpecificMethods` + + +## Step13: Changes in `StringHelperParameterizedTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +``` + +2. Removed `@RunWith(Parameterized.class)` in the class level +3. Change in the constructor + +**AS-IS** +```java +public StringHelperParameterizedTest(String input, String expectedOutput) { + this.input = input; + this.expectedOutput = expectedOutput; +} +``` +**TO-BE** + +```java +public void initStringHelperParameterizedTest(String input, String expectedOutput) { + this.input = input; + this.expectedOutput = expectedOutput; +} +``` +4. Remove `@Parameters` in `testConditions` method +5. Refactor `testTruncateAInFirst2Positions` method + +**AS-IS** + +```java +@Test +public void testTruncateAInFirst2Positions() { + assertEquals(expectedOutput, + helper.truncateAInFirst2Positions(input)); +} +``` +**TO_BE** + +```java +@MethodSource("testConditions") +@ParameterizedTest +public void truncateAInFirst2Positions(String input, String expectedOutput) { + initStringHelperParameterizedTest(input, expectedOutput); + assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input)); +} +``` + +## Step14: Changes in `StringHelperTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +``` +**TO-BE** + +```java +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +``` + +### Annotations used in this class has been changed from + +* @Before > @BeforeEach + +## Step15: Changes in `TodoBusinessImplMockitoInjectMocksTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.mockito.runners.MockitoJUnitRunner; +``` +**TO-BE** + +```java +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.junit.jupiter.MockitoExtension; +``` +**AS-IS** +```java +@RunWith(PowerMockRunner.class) +``` +**TO-BE** + +```java +@ExtendWith(MockitoExtension.class) +``` + +## Step16: Changes in `TodoBusinessImplMockitoRulesTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import org.junit.Rule; // Removed +import org.junit.Test; + +import org.mockito.junit.MockitoJUnit; // Removed +import org.mockito.junit.MockitoRule; // Removed +``` +**TO-BE** + +```java +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.junit.jupiter.MockitoExtension; +``` + +**AS-IS** +```java +@RunWith(PowerMockRunner.class) +``` +**TO-BE** + +```java +@ExtendWith(MockitoExtension.class) +``` + +### Removed this +```java +@Rule +public MockitoRule mockitoRule = MockitoJUnit.rule(); +``` + +## Step17: Changes in `TodoBusinessImplMockitoTest` class +Qualified PackageName has been changed + +**AS-IS** + +```java +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import org.junit.Test; +``` +**TO-BE** +```java +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +``` + +## Step18: Changes in `TodoBusinessImplStubTest` class +Qualified PackageName has been changed + +**AS-IS** +```java +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +``` +**TO-BE** +```java +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; +``` + +### Happy Learning @in28minutes \ No newline at end of file diff --git a/pom.xml b/pom.xml index 704018b..92f1a9e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,33 +6,50 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test org.hamcrest - hamcrest-library - 1.3 + hamcrest + 2.2 test - org.powermock - powermock-api-mockito - 1.6.4 + org.mockito + mockito-core + 5.4.0 test - org.powermock - powermock-module-junit4 - 1.6.4 + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 test @@ -42,8 +59,7 @@ org.apache.maven.plugins maven-compiler-plugin - 1.8 - 1.8 + 21 diff --git a/src/test/java/com/clarity/business/ClientBOTest.java b/src/test/java/com/clarity/business/ClientBOTest.java index ddd6e55..0803cc5 100644 --- a/src/test/java/com/clarity/business/ClientBOTest.java +++ b/src/test/java/com/clarity/business/ClientBOTest.java @@ -1,15 +1,15 @@ package com.clarity.business; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -42,23 +42,25 @@ ProductType.BANK_GUARANTEE, new AmountImpl( assertEquals(new BigDecimal("11.0"), temp.getValue()); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum1() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - List products = new ArrayList(); + List products = new ArrayList(); - products.add(new ProductImpl(100, "Product 15", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); - products.add(new ProductImpl(120, "Product 20", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("6.0"), Currency.EURO))); + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); - @SuppressWarnings("unused") - Amount temp = null; + @SuppressWarnings("unused") + Amount temp = null; - temp = clientBO.getClientProductsSum(products); + temp = clientBO.getClientProductsSum(products); + }); } @Test diff --git a/src/test/java/com/clarity/business/ClientBOTestRefactored.java b/src/test/java/com/clarity/business/ClientBOTestRefactored.java index e7a324c..1eb04e5 100644 --- a/src/test/java/com/clarity/business/ClientBOTestRefactored.java +++ b/src/test/java/com/clarity/business/ClientBOTestRefactored.java @@ -1,14 +1,15 @@ package com.clarity.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -39,18 +40,21 @@ public void testClientProductSum_AllProductsSameCurrency() assertAmount(actual, expected); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum_DifferentCurrencies_ThrowsException() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - Amount[] amounts = { - new AmountImpl(new BigDecimal("5.0"), Currency.EURO), - new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE) }; + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE)}; - List products = createProductListWithAmounts(amounts); + List products = createProductListWithAmounts(amounts); - @SuppressWarnings("unused") - Amount actual = clientBO.getClientProductsSum(products); + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + + }); } diff --git a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoInjectMocksTest.java b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoInjectMocksTest.java index 4308550..4fcf96b 100644 --- a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoInjectMocksTest.java +++ b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoInjectMocksTest.java @@ -1,8 +1,8 @@ package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -10,18 +10,18 @@ import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; diff --git a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java index 942292a..88403bd 100644 --- a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java +++ b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java @@ -1,8 +1,8 @@ package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -10,23 +10,20 @@ import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; diff --git a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoTest.java b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoTest.java index f4b9ef4..002e180 100644 --- a/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoTest.java +++ b/src/test/java/com/in28minutes/business/TodoBusinessImplMockitoTest.java @@ -1,8 +1,8 @@ package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -11,7 +11,7 @@ import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; diff --git a/src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java b/src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java index 8e7b33a..432f977 100644 --- a/src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java +++ b/src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java @@ -1,12 +1,12 @@ package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { diff --git a/src/test/java/com/in28minutes/junit/helper/ArraysCompareTest.java b/src/test/java/com/in28minutes/junit/helper/ArraysCompareTest.java index da54df7..fa60ad0 100644 --- a/src/test/java/com/in28minutes/junit/helper/ArraysCompareTest.java +++ b/src/test/java/com/in28minutes/junit/helper/ArraysCompareTest.java @@ -1,10 +1,12 @@ package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysCompareTest { @@ -16,14 +18,17 @@ public void testArraySort_RandomArray() { assertArrayEquals(expected, numbers); } - @Test(expected=NullPointerException.class) + @Test public void testArraySort_NullArray() { - int[] numbers = null; - Arrays.sort(numbers); + assertThrows(NullPointerException.class, () -> { + int[] numbers = null; + Arrays.sort(numbers); + }); } - - @Test(timeout=100) - public void testSort_Performance(){ + + @Test + @Timeout(value = 100) + public void testSort_Performance() { int array[] = {12,23,4}; for(int i=1;i<=1000000;i++) { diff --git a/src/test/java/com/in28minutes/junit/helper/ArraysTest.java b/src/test/java/com/in28minutes/junit/helper/ArraysTest.java index 757963e..94e3029 100644 --- a/src/test/java/com/in28minutes/junit/helper/ArraysTest.java +++ b/src/test/java/com/in28minutes/junit/helper/ArraysTest.java @@ -1,15 +1,14 @@ package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - - import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysTest { - @Test(timeout=100) - public void testPerformance() { + @Test + @Timeout(value = 100) + public void performance() { for(int i=0;i<1000000;i++){ Arrays.sort(new int[]{i,i-1,i+1}); } diff --git a/src/test/java/com/in28minutes/junit/helper/QuickBeforeAfterTest.java b/src/test/java/com/in28minutes/junit/helper/QuickBeforeAfterTest.java index 379cfb5..da805dc 100644 --- a/src/test/java/com/in28minutes/junit/helper/QuickBeforeAfterTest.java +++ b/src/test/java/com/in28minutes/junit/helper/QuickBeforeAfterTest.java @@ -1,21 +1,19 @@ package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class QuickBeforeAfterTest { - - @BeforeClass + + @BeforeAll public static void beforeClass(){ System.out.println("Before Class"); } - - @Before + + @BeforeEach public void setup(){ System.out.println("Before Test"); } @@ -29,13 +27,13 @@ public void test1() { public void test2() { System.out.println("test2 executed"); } - - @After + + @AfterEach public void teardown() { System.out.println("After test"); } - - @AfterClass + + @AfterAll public static void afterClass(){ System.out.println("After Class"); } diff --git a/src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java b/src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java index b996db3..8bd02b2 100644 --- a/src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java +++ b/src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java @@ -1,17 +1,13 @@ package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.Collection; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; -@RunWith(Parameterized.class) public class StringHelperParameterizedTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA @@ -20,13 +16,12 @@ public class StringHelperParameterizedTest { private String input; private String expectedOutput; - - public StringHelperParameterizedTest(String input, String expectedOutput) { + + public void initStringHelperParameterizedTest(String input, String expectedOutput) { this.input = input; this.expectedOutput = expectedOutput; } - @Parameters public static Collection testConditions() { String expectedOutputs[][] = { { "AACD", "CD" }, @@ -34,8 +29,10 @@ public static Collection testConditions() { return Arrays.asList(expectedOutputs); } - @Test - public void testTruncateAInFirst2Positions() { + @MethodSource("testConditions") + @ParameterizedTest + public void truncateAInFirst2Positions(String input, String expectedOutput) { + initStringHelperParameterizedTest(input, expectedOutput); assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input)); } diff --git a/src/test/java/com/in28minutes/junit/helper/StringHelperTest.java b/src/test/java/com/in28minutes/junit/helper/StringHelperTest.java index 6ca2f96..ad080f9 100644 --- a/src/test/java/com/in28minutes/junit/helper/StringHelperTest.java +++ b/src/test/java/com/in28minutes/junit/helper/StringHelperTest.java @@ -1,21 +1,21 @@ package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class StringHelperTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA StringHelper helper; - - @Before + + @BeforeEach public void before(){ helper = new StringHelper(); } - + @Test public void testTruncateAInFirst2Positions_AinFirst2Positions() { diff --git a/src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java b/src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java index 40dd944..06e3d1b 100644 --- a/src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java +++ b/src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java @@ -1,14 +1,12 @@ package com.in28minutes.junit.suite; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - import com.in28minutes.junit.helper.ArraysTest; import com.in28minutes.junit.helper.StringHelperTest; +import org.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; -@RunWith(Suite.class) -@SuiteClasses({ArraysTest.class,StringHelperTest.class}) +@Suite +@SelectClasses({ArraysTest.class,StringHelperTest.class}) public class DummyTestSuite { } diff --git a/src/test/java/com/in28minutes/mockito/FirstMockitoTest.java b/src/test/java/com/in28minutes/mockito/FirstMockitoTest.java index f263491..d14b255 100644 --- a/src/test/java/com/in28minutes/mockito/FirstMockitoTest.java +++ b/src/test/java/com/in28minutes/mockito/FirstMockitoTest.java @@ -1,8 +1,8 @@ package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { diff --git a/src/test/java/com/in28minutes/mockito/HamcrestMatcherTest.java b/src/test/java/com/in28minutes/mockito/HamcrestMatcherTest.java index 792da4d..7c308bc 100644 --- a/src/test/java/com/in28minutes/mockito/HamcrestMatcherTest.java +++ b/src/test/java/com/in28minutes/mockito/HamcrestMatcherTest.java @@ -14,7 +14,7 @@ import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { diff --git a/src/test/java/com/in28minutes/mockito/ListTest.java b/src/test/java/com/in28minutes/mockito/ListTest.java index e035381..b0408f3 100644 --- a/src/test/java/com/in28minutes/mockito/ListTest.java +++ b/src/test/java/com/in28minutes/mockito/ListTest.java @@ -1,16 +1,15 @@ package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -38,12 +37,14 @@ public void letsMockListGet() { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/src/test/java/com/in28minutes/mockito/SpyTest.java b/src/test/java/com/in28minutes/mockito/SpyTest.java index e15ddc7..81ef0b3 100644 --- a/src/test/java/com/in28minutes/mockito/SpyTest.java +++ b/src/test/java/com/in28minutes/mockito/SpyTest.java @@ -1,14 +1,13 @@ package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.stub; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class SpyTest { @@ -24,19 +23,4 @@ public void creatingASpyOnArrayList() { assertEquals(2, listSpy.size()); assertEquals("Ranga", listSpy.get(0)); } - - @Test - public void creatingASpyOnArrayList_overridingSpecificMethods() { - List listSpy = spy(ArrayList.class); - listSpy.add("Ranga"); - listSpy.add("in28Minutes"); - - stub(listSpy.size()).toReturn(-1); - - assertEquals(-1, listSpy.size()); - assertEquals("Ranga", listSpy.get(0)); - - // @Spy Annotation - } - } \ No newline at end of file diff --git a/src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java b/src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java new file mode 100644 index 0000000..1d938f7 --- /dev/null +++ b/src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java @@ -0,0 +1,37 @@ +package com.in28minutes.powermock; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; + +import java.util.Arrays; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class MockitoMockingStaticMethodTest { + + @Mock + Dependency dependencyMock; + + @InjectMocks + SystemUnderTest systemUnderTest; + + @Test + public void powerMockito_MockingAStaticMethodCall() { + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); + + MockedStatic mockedStatic = mockStatic(UtilityClass.class); + + mockedStatic.when(() -> UtilityClass.staticMethod(anyLong())).thenReturn(150); + + assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); + + mockedStatic.verify(() -> UtilityClass.staticMethod(1 + 2 + 3), times(1)); + } +} \ No newline at end of file diff --git a/src/test/java/com/in28minutes/powermock/PowerMockitoMockingConstructorTest.java b/src/test/java/com/in28minutes/powermock/PowerMockitoMockingConstructorTest.java deleted file mode 100644 index 549f8d1..0000000 --- a/src/test/java/com/in28minutes/powermock/PowerMockitoMockingConstructorTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.in28minutes.powermock; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.stub; - -import java.util.ArrayList; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ SystemUnderTest.class /*To be able to mock the Constructor, we need to add in the Class that creates the new object*/}) -public class PowerMockitoMockingConstructorTest { - - private static final int SOME_DUMMY_SIZE = 100; - - @Mock - Dependency dependencyMock; - - @InjectMocks - SystemUnderTest systemUnderTest; - - @Test - public void powerMockito_MockingAConstructor() throws Exception { - - ArrayList mockList = mock(ArrayList.class); - - stub(mockList.size()).toReturn(SOME_DUMMY_SIZE); - - PowerMockito.whenNew(ArrayList.class).withAnyArguments().thenReturn( - mockList); - - int size = systemUnderTest.methodUsingAnArrayListConstructor(); - - assertEquals(SOME_DUMMY_SIZE, size); - } -} \ No newline at end of file diff --git a/src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java b/src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java deleted file mode 100644 index 54423c4..0000000 --- a/src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.in28minutes.powermock; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Mockito.when; - -import java.util.Arrays; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ UtilityClass.class /*The class with static method to be mocked*/}) -public class PowerMockitoMockingStaticMethodTest { - - @Mock - Dependency dependencyMock; - - @InjectMocks - SystemUnderTest systemUnderTest; - - @Test - public void powerMockito_MockingAStaticMethodCall() { - - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); - - PowerMockito.mockStatic(UtilityClass.class); - - when(UtilityClass.staticMethod(anyLong())).thenReturn(150); - - assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); - - //To verify a specific method call - //First : Call PowerMockito.verifyStatic() - //Second : Call the method to be verified - PowerMockito.verifyStatic(); - UtilityClass.staticMethod(1 + 2 + 3); - - // verify exact number of calls - //PowerMockito.verifyStatic(Mockito.times(1)); - - } -} \ No newline at end of file diff --git a/src/test/java/com/in28minutes/powermock/PowerMockitoTestingPrivateMethodTest.java b/src/test/java/com/in28minutes/powermock/PowerMockitoTestingPrivateMethodTest.java index f6ba741..80244c8 100644 --- a/src/test/java/com/in28minutes/powermock/PowerMockitoTestingPrivateMethodTest.java +++ b/src/test/java/com/in28minutes/powermock/PowerMockitoTestingPrivateMethodTest.java @@ -1,18 +1,18 @@ package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; +import java.lang.reflect.Method; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) +@ExtendWith(MockitoExtension.class) public class PowerMockitoTestingPrivateMethodTest { @Mock @@ -23,10 +23,10 @@ public class PowerMockitoTestingPrivateMethodTest { @Test public void powerMockito_CallingAPrivateMethod() throws Exception { - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); - long value = (Long) Whitebox.invokeMethod(systemUnderTest, - "privateMethodUnderTest"); + Method method = systemUnderTest.getClass().getDeclaredMethod("privateMethodUnderTest"); + method.setAccessible(true); + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); + long value = (Long) method.invoke(systemUnderTest); assertEquals(6, value); } } \ No newline at end of file From 293bfcf324dde7255da57f9cbd21dcf5be4a2409 Mon Sep 17 00:00:00 2001 From: bsmahi Date: Thu, 28 Mar 2024 20:46:41 +0530 Subject: [PATCH 2/2] Upgraded to Junit 5 and Refactored --- Step01.md | 58 +++++--- Step02.md | 25 +++- Step03.md | 32 +++-- Step04.md | 39 ++++-- Step05.md | 64 ++++++--- Step06.md | 65 ++++++--- Step07.md | 61 +++++---- Step08.md | 99 +++++++------- Step09.md | 117 +++++++++++----- Step10.md | 100 +++++++++----- Step11.md | 126 +++++++++-------- Step13.md | 135 ++++++++++--------- Step15.md | 365 ++++++++++++++++++++++--------------------------- Step16.md | 354 ++++++++++++++++++++++++------------------------ Step17.md | 396 +++++++++++++++++++++++------------------------------- 15 files changed, 1079 insertions(+), 957 deletions(-) diff --git a/Step01.md b/Step01.md index 2fa52d4..96adb01 100644 --- a/Step01.md +++ b/Step01.md @@ -10,17 +10,28 @@ ``` - junit - junit - 4.12 - test - - - org.mockito - mockito-all - 1.10.19 - test - + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + + + org.mockito + mockito-inline + 3.6.0 + test + ``` ## Files List @@ -34,15 +45,26 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 test + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -52,9 +74,9 @@ ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { diff --git a/Step02.md b/Step02.md index 6f1816d..56908e5 100644 --- a/Step02.md +++ b/Step02.md @@ -14,15 +14,26 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -71,9 +82,9 @@ public interface TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { diff --git a/Step03.md b/Step03.md index 01ffe38..0cfcc5a 100644 --- a/Step03.md +++ b/Step03.md @@ -17,15 +17,26 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -74,13 +85,13 @@ public interface TodoService { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -94,6 +105,7 @@ public class TodoBusinessImplStubTest { assertEquals(2, todos.size()); } } + ``` ### /src/test/java/com/in28minutes/data/stub/TodoServiceStub.java ``` @@ -115,9 +127,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { diff --git a/Step04.md b/Step04.md index b228cc7..e7fa6ec 100644 --- a/Step04.md +++ b/Step04.md @@ -28,15 +28,26 @@ org.hamcrest.CoreMatchers 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -85,14 +96,18 @@ public interface TodoService { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import com.in28minutes.data.api.TodoService; @@ -115,13 +130,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -156,9 +171,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { diff --git a/Step05.md b/Step05.md index 36ddaf5..05e13a1 100644 --- a/Step05.md +++ b/Step05.md @@ -22,15 +22,26 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -79,14 +90,18 @@ public interface TodoService { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import com.in28minutes.data.api.TodoService; @@ -109,13 +124,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -150,9 +165,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -167,13 +182,16 @@ public class FirstMockitoTest { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -181,14 +199,14 @@ public class ListTest { @Test public void letsMockListSize() { List list = mock(List.class); - Mockito.when(list.size()).thenReturn(10); + when(list.size()).thenReturn(10); assertEquals(10, list.size()); } @Test public void letsMockListSizeWithMultipleReturnValues() { List list = mock(List.class); - Mockito.when(list.size()).thenReturn(10).thenReturn(20); + when(list.size()).thenReturn(10).thenReturn(20); assertEquals(10, list.size()); // First Call assertEquals(20, list.size()); // Second Call } @@ -196,11 +214,21 @@ public class ListTest { @Test public void letsMockListGet() { List list = mock(List.class); - Mockito.when(list.get(0)).thenReturn("in28Minutes"); + when(list.get(0)).thenReturn("in28Minutes"); assertEquals("in28Minutes", list.get(0)); assertNull(list.get(1)); } + @Test + public void letsMockListGetToThrowException() { + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); + } + @Test public void letsMockListGetWithAny() { List list = mock(List.class); diff --git a/Step06.md b/Step06.md index b95711d..3bdf653 100644 --- a/Step06.md +++ b/Step06.md @@ -20,15 +20,26 @@ BDD : [BDD Reference](http://en.wikipedia.org/wiki/Behavior_Driven_Development) 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -78,16 +89,17 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import com.in28minutes.data.api.TodoService; @@ -104,7 +116,7 @@ public class TodoBusinessImplMockitoTest { .retrieveTodosRelatedToSpring("Ranga"); assertEquals(2, todos.size()); } - + @Test public void usingMockito_UsingBDD() { TodoService todoService = mock(TodoService.class); @@ -122,20 +134,19 @@ public class TodoBusinessImplMockitoTest { //then assertThat(todos.size(), is(2)); } - } ``` ### /src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -170,9 +181,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -188,15 +199,15 @@ public class FirstMockitoTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -204,14 +215,14 @@ public class ListTest { @Test public void letsMockListSize() { List list = mock(List.class); - Mockito.when(list.size()).thenReturn(10); + when(list.size()).thenReturn(10); assertEquals(10, list.size()); } @Test public void letsMockListSizeWithMultipleReturnValues() { List list = mock(List.class); - Mockito.when(list.size()).thenReturn(10).thenReturn(20); + when(list.size()).thenReturn(10).thenReturn(20); assertEquals(10, list.size()); // First Call assertEquals(20, list.size()); // Second Call } @@ -219,11 +230,21 @@ public class ListTest { @Test public void letsMockListGet() { List list = mock(List.class); - Mockito.when(list.get(0)).thenReturn("in28Minutes"); + when(list.get(0)).thenReturn("in28Minutes"); assertEquals("in28Minutes", list.get(0)); assertNull(list.get(1)); } + @Test + public void letsMockListGetToThrowException() { + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); + } + @Test public void letsMockListGetWithAny() { List list = mock(List.class); diff --git a/Step07.md b/Step07.md index be63357..41bddd9 100644 --- a/Step07.md +++ b/Step07.md @@ -20,15 +20,26 @@ verify(todoService, Mockito.never()).deleteTodo("Learn Spring MVC"); 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -91,8 +102,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -101,8 +112,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.mockito.Mockito; +import org.junit.jupiter.api.Test; import com.in28minutes.data.api.TodoService; @@ -119,7 +129,7 @@ public class TodoBusinessImplMockitoTest { .retrieveTodosRelatedToSpring("Ranga"); assertEquals(2, todos.size()); } - + @Test public void usingMockito_UsingBDD() { TodoService todoService = mock(TodoService.class); @@ -137,7 +147,7 @@ public class TodoBusinessImplMockitoTest { //then assertThat(todos.size(), is(2)); } - + @Test public void letsTestDeleteNow() { @@ -168,13 +178,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -213,9 +223,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -231,16 +241,15 @@ public class FirstMockitoTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -268,12 +277,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/Step08.md b/Step08.md index 6d7f188..641a5c1 100644 --- a/Step08.md +++ b/Step08.md @@ -6,18 +6,20 @@ First Snippet ``` @Test public void captureArgument() { - ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor argumentCaptor = ArgumentCaptor + .forClass(String.class); - TodoService todoService = mock(TodoService.class); + TodoService todoService = mock(TodoService.class); - List allTodos = Arrays.asList("Learn Spring MVC", "Learn Spring", "Learn to Dance"); - Mockito.when(todoService.retrieveTodos("Ranga")).thenReturn(allTodos); + List allTodos = Arrays.asList("Learn Spring MVC", + "Learn Spring", "Learn to Dance"); + Mockito.when(todoService.retrieveTodos("Ranga")).thenReturn(allTodos); - TodoBusinessImpl todoBusinessImpl = new TodoBusinessImpl(todoService); - todoBusinessImpl.deleteTodosNotRelatedToSpring("Ranga"); - Mockito.verify(todoService).deleteTodo(argumentCaptor.capture()); + TodoBusinessImpl todoBusinessImpl = new TodoBusinessImpl(todoService); + todoBusinessImpl.deleteTodosNotRelatedToSpring("Ranga"); + Mockito.verify(todoService).deleteTodo(argumentCaptor.capture()); - assertEquals("Learn to Dance", argumentCaptor.getValue()); + assertEquals("Learn to Dance", argumentCaptor.getValue()); } ``` ## Files List @@ -31,15 +33,26 @@ First Snippet 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test @@ -102,8 +115,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -112,9 +125,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; +import org.junit.jupiter.api.Test; import com.in28minutes.data.api.TodoService; @@ -131,7 +142,7 @@ public class TodoBusinessImplMockitoTest { .retrieveTodosRelatedToSpring("Ranga"); assertEquals(2, todos.size()); } - + @Test public void usingMockito_UsingBDD() { TodoService todoService = mock(TodoService.class); @@ -149,7 +160,7 @@ public class TodoBusinessImplMockitoTest { //then assertThat(todos.size(), is(2)); } - + @Test public void letsTestDeleteNow() { @@ -174,37 +185,19 @@ public class TodoBusinessImplMockitoTest { // atLeastOnce, atLeast } - - @Test - public void captureArgument() { - ArgumentCaptor argumentCaptor = ArgumentCaptor - .forClass(String.class); - - TodoService todoService = mock(TodoService.class); - - List allTodos = Arrays.asList("Learn Spring MVC", - "Learn Spring", "Learn to Dance"); - Mockito.when(todoService.retrieveTodos("Ranga")).thenReturn(allTodos); - - TodoBusinessImpl todoBusinessImpl = new TodoBusinessImpl(todoService); - todoBusinessImpl.deleteTodosNotRelatedToSpring("Ranga"); - Mockito.verify(todoService).deleteTodo(argumentCaptor.capture()); - - assertEquals("Learn to Dance", argumentCaptor.getValue()); - } } ``` ### /src/test/java/com/in28minutes/business/TodoBusinessImplStubTest.java ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -218,6 +211,7 @@ public class TodoBusinessImplStubTest { assertEquals(2, todos.size()); } } + ``` ### /src/test/java/com/in28minutes/data/stub/TodoServiceStub.java ``` @@ -243,9 +237,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -261,16 +255,15 @@ public class FirstMockitoTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -298,12 +291,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/Step09.md b/Step09.md index b60fd23..d35ab4d 100644 --- a/Step09.md +++ b/Step09.md @@ -10,11 +10,29 @@ import static org.hamcrest.CoreMatchers.hasItems; - First Snippet ``` - org.hamcrest - hamcrest-library - 1.3 - test - + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 + test + + + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + ``` - Code Snippets @@ -40,23 +58,52 @@ import static org.hamcrest.CoreMatchers.hasItems; 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 test + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test - - org.hamcrest - hamcrest-library - 1.3 - test - + + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 + test + + + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + ``` @@ -117,8 +164,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -127,7 +174,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -213,13 +260,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -233,6 +280,7 @@ public class TodoBusinessImplStubTest { assertEquals(2, todos.size()); } } + ``` ### /src/test/java/com/in28minutes/data/stub/TodoServiceStub.java ``` @@ -258,9 +306,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -289,7 +337,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -319,16 +367,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -356,12 +403,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/Step10.md b/Step10.md index 3b2a5d9..7dc18d4 100644 --- a/Step10.md +++ b/Step10.md @@ -16,23 +16,52 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test - - org.hamcrest - hamcrest-library - 1.3 - test - + + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 + test + + + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 + test + ``` @@ -93,8 +122,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -102,18 +131,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -191,8 +220,8 @@ public class TodoBusinessImplMockitoInjectMocksTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -201,7 +230,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -287,13 +316,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -332,9 +361,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -363,7 +392,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -393,16 +422,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -430,12 +458,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/Step11.md b/Step11.md index 6c19326..b828564 100644 --- a/Step11.md +++ b/Step11.md @@ -1,15 +1,4 @@ -## What You Will Learn during this Step: -- JUnit Rules. Using MockitoJUnit.rule() instead of @RunWith(MockitoJUnitRunner.class). - ## Useful Snippets and References -First Snippet -``` -@Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); -``` -Second Snippet -``` -``` ## Files List ### /pom.xml @@ -22,23 +11,52 @@ Second Snippet 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + + + org.mockito + mockito-inline + 3.6.0 + test + + + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 test org.mockito - mockito-all - 1.10.19 + mockito-junit-jupiter + 4.5.1 test - - org.hamcrest - hamcrest-library - 1.3 - test - + + org.hamcrest + hamcrest-library + 1.3 + test + ``` @@ -100,8 +118,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -109,18 +127,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -198,8 +216,8 @@ public class TodoBusinessImplMockitoInjectMocksTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -207,23 +225,20 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; @@ -300,8 +315,8 @@ public class TodoBusinessImplMockitoRulesTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -310,7 +325,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -396,13 +411,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -441,9 +456,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -472,7 +487,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -502,16 +517,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -539,12 +553,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test diff --git a/Step13.md b/Step13.md index 64bf2bd..7f403af 100644 --- a/Step13.md +++ b/Step13.md @@ -14,23 +14,52 @@ 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + + + org.mockito + mockito-inline + 3.6.0 + test + + + org.hamcrest + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 test org.mockito - mockito-all - 1.10.19 + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 test - - org.hamcrest - hamcrest-library - 1.3 - test - ``` @@ -92,8 +121,8 @@ public interface TodoService { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -101,18 +130,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -190,8 +219,8 @@ public class TodoBusinessImplMockitoInjectMocksTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -199,23 +228,20 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; @@ -292,8 +318,8 @@ public class TodoBusinessImplMockitoRulesTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -302,7 +328,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -388,13 +414,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -433,9 +459,9 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -464,7 +490,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -494,16 +520,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -531,12 +556,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test @@ -566,15 +593,14 @@ public class ListTest { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.stub; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class SpyTest { @@ -590,20 +616,5 @@ public class SpyTest { assertEquals(2, listSpy.size()); assertEquals("Ranga", listSpy.get(0)); } - - @Test - public void creatingASpyOnArrayList_overridingSpecificMethods() { - List listSpy = spy(ArrayList.class); - listSpy.add("Ranga"); - listSpy.add("in28Minutes"); - - stub(listSpy.size()).toReturn(-1); - - assertEquals(-1, listSpy.size()); - assertEquals("Ranga", listSpy.get(0)); - - // @Spy Annotation - } - } ``` diff --git a/Step15.md b/Step15.md index 3af559e..6e5c30d 100644 --- a/Step15.md +++ b/Step15.md @@ -1,37 +1,4 @@ ## What You Will Learn during this Step: -- Add dependency on PowerMock. -- Using PowerMock and Mockito to mock a Static Method. -- PowerMockitoMockingStaticMethodTest - -## Useful Snippets and References -pom.xml -``` - - org.powermock - powermock-api-mockito - 1.6.4 - test - - - org.powermock - powermock-module-junit4 - 1.6.4 - test - - -``` -Other Useful Snippets -``` -@RunWith(PowerMockRunner.class) -@PrepareForTest({ UtilityClass.class}) - -PowerMockito.mockStatic(UtilityClass.class); -when(UtilityClass.staticMethod(anyLong())).thenReturn(150); - -PowerMockito.verifyStatic(); -UtilityClass.staticMethod(1 + 2 + 3); -``` -## Files List ## Files List ### /pom.xml ``` @@ -43,33 +10,50 @@ UtilityClass.staticMethod(1 + 2 + 3); 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test org.hamcrest - hamcrest-library - 1.3 + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 test - org.powermock - powermock-api-mockito - 1.6.4 + org.mockito + mockito-junit-jupiter + 4.5.1 test - org.powermock - powermock-module-junit4 - 1.6.4 + org.hamcrest + hamcrest-library + 1.3 test @@ -79,8 +63,7 @@ UtilityClass.staticMethod(1 + 2 + 3); org.apache.maven.plugins maven-compiler-plugin - 1.8 - 1.8 + 21 @@ -744,16 +727,16 @@ public class UtilityClass { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -786,23 +769,25 @@ public class ClientBOTest { assertEquals(new BigDecimal("11.0"), temp.getValue()); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum1() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - List products = new ArrayList(); + List products = new ArrayList(); - products.add(new ProductImpl(100, "Product 15", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); - products.add(new ProductImpl(120, "Product 20", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("6.0"), Currency.EURO))); + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); - @SuppressWarnings("unused") - Amount temp = null; + @SuppressWarnings("unused") + Amount temp = null; - temp = clientBO.getClientProductsSum(products); + temp = clientBO.getClientProductsSum(products); + }); } @Test @@ -826,15 +811,16 @@ public class ClientBOTest { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -865,18 +851,21 @@ public class ClientBOTestRefactored { assertAmount(actual, expected); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum_DifferentCurrencies_ThrowsException() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - Amount[] amounts = { - new AmountImpl(new BigDecimal("5.0"), Currency.EURO), - new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE) }; + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE)}; - List products = createProductListWithAmounts(amounts); + List products = createProductListWithAmounts(amounts); - @SuppressWarnings("unused") - Amount actual = clientBO.getClientProductsSum(products); + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + + }); } @@ -916,8 +905,8 @@ public class ClientBOTestRefactored { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -925,18 +914,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -1008,14 +997,15 @@ public class TodoBusinessImplMockitoInjectMocksTest { assertEquals("Learn to Dance", stringArgumentCaptor.getValue()); } } + ``` ### /src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java ``` package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -1023,23 +1013,20 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; @@ -1116,8 +1103,8 @@ public class TodoBusinessImplMockitoRulesTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -1126,7 +1113,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -1212,13 +1199,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -1257,11 +1244,13 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysCompareTest { @@ -1273,14 +1262,17 @@ public class ArraysCompareTest { assertArrayEquals(expected, numbers); } - @Test(expected=NullPointerException.class) + @Test public void testArraySort_NullArray() { - int[] numbers = null; - Arrays.sort(numbers); + assertThrows(NullPointerException.class, () -> { + int[] numbers = null; + Arrays.sort(numbers); + }); } - - @Test(timeout=100) - public void testSort_Performance(){ + + @Test + @Timeout(value = 100) + public void testSort_Performance() { int array[] = {12,23,4}; for(int i=1;i<=1000000;i++) { @@ -1290,21 +1282,21 @@ public class ArraysCompareTest { } } + ``` ### /src/test/java/com/in28minutes/junit/helper/ArraysTest.java ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - - import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysTest { - @Test(timeout=100) - public void testPerformance() { + @Test + @Timeout(value = 100) + public void performance() { for(int i=0;i<1000000;i++){ Arrays.sort(new int[]{i,i-1,i+1}); } @@ -1315,22 +1307,20 @@ public class ArraysTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class QuickBeforeAfterTest { - - @BeforeClass + + @BeforeAll public static void beforeClass(){ System.out.println("Before Class"); } - - @Before + + @BeforeEach public void setup(){ System.out.println("Before Test"); } @@ -1344,13 +1334,13 @@ public class QuickBeforeAfterTest { public void test2() { System.out.println("test2 executed"); } - - @After + + @AfterEach public void teardown() { System.out.println("After test"); } - - @AfterClass + + @AfterAll public static void afterClass(){ System.out.println("After Class"); } @@ -1361,18 +1351,14 @@ public class QuickBeforeAfterTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.Collection; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; -@RunWith(Parameterized.class) public class StringHelperParameterizedTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA @@ -1381,13 +1367,12 @@ public class StringHelperParameterizedTest { private String input; private String expectedOutput; - - public StringHelperParameterizedTest(String input, String expectedOutput) { + + public void initStringHelperParameterizedTest(String input, String expectedOutput) { this.input = input; this.expectedOutput = expectedOutput; } - @Parameters public static Collection testConditions() { String expectedOutputs[][] = { { "AACD", "CD" }, @@ -1395,8 +1380,10 @@ public class StringHelperParameterizedTest { return Arrays.asList(expectedOutputs); } - @Test - public void testTruncateAInFirst2Positions() { + @MethodSource("testConditions") + @ParameterizedTest + public void truncateAInFirst2Positions(String input, String expectedOutput) { + initStringHelperParameterizedTest(input, expectedOutput); assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input)); } @@ -1406,22 +1393,22 @@ public class StringHelperParameterizedTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class StringHelperTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA StringHelper helper; - - @Before + + @BeforeEach public void before(){ helper = new StringHelper(); } - + @Test public void testTruncateAInFirst2Positions_AinFirst2Positions() { @@ -1448,31 +1435,31 @@ public class StringHelperTest { } + ``` ### /src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java ``` package com.in28minutes.junit.suite; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - import com.in28minutes.junit.helper.ArraysTest; import com.in28minutes.junit.helper.StringHelperTest; +import org.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; -@RunWith(Suite.class) -@SuiteClasses({ArraysTest.class,StringHelperTest.class}) +@Suite +@SelectClasses({ArraysTest.class,StringHelperTest.class}) public class DummyTestSuite { } + ``` ### /src/test/java/com/in28minutes/mockito/FirstMockitoTest.java ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -1501,7 +1488,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -1531,16 +1518,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -1568,12 +1554,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test @@ -1598,20 +1586,20 @@ public class ListTest { assertThat("in28Minutes", is(list.get(0))); } } + ``` ### /src/test/java/com/in28minutes/mockito/SpyTest.java ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.stub; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class SpyTest { @@ -1627,44 +1615,27 @@ public class SpyTest { assertEquals(2, listSpy.size()); assertEquals("Ranga", listSpy.get(0)); } - - @Test - public void creatingASpyOnArrayList_overridingSpecificMethods() { - List listSpy = spy(ArrayList.class); - listSpy.add("Ranga"); - listSpy.add("in28Minutes"); - - stub(listSpy.size()).toReturn(-1); - - assertEquals(-1, listSpy.size()); - assertEquals("Ranga", listSpy.get(0)); - - // @Spy Annotation - } - } ``` ### /src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java ``` package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ UtilityClass.class}) -public class PowerMockitoMockingStaticMethodTest { +@ExtendWith(MockitoExtension.class) +public class MockitoMockingStaticMethodTest { @Mock Dependency dependencyMock; @@ -1674,25 +1645,15 @@ public class PowerMockitoMockingStaticMethodTest { @Test public void powerMockito_MockingAStaticMethodCall() { + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); + MockedStatic mockedStatic = mockStatic(UtilityClass.class); - PowerMockito.mockStatic(UtilityClass.class); - - when(UtilityClass.staticMethod(anyLong())).thenReturn(150); + mockedStatic.when(() -> UtilityClass.staticMethod(anyLong())).thenReturn(150); assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); - //To verify a specific method call - //First : Call PowerMockito.verifyStatic() - //Second : Call the method to be verified - PowerMockito.verifyStatic(); - UtilityClass.staticMethod(1 + 2 + 3); - - // verify exact number of calls - //PowerMockito.verifyStatic(Mockito.times(1)); - + mockedStatic.verify(() -> UtilityClass.staticMethod(1 + 2 + 3), times(1)); } } ``` diff --git a/Step16.md b/Step16.md index 1e3800b..b06aead 100644 --- a/Step16.md +++ b/Step16.md @@ -18,33 +18,50 @@ long value = (Long) Whitebox.invokeMethod(systemUnderTest, 0.0.1-SNAPSHOT - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter + 5.10.2 test + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test org.hamcrest - hamcrest-library - 1.3 + hamcrest + 2.2 test - org.powermock - powermock-api-mockito - 1.6.4 + org.mockito + mockito-core + 5.4.0 test - org.powermock - powermock-module-junit4 - 1.6.4 + org.mockito + mockito-junit-jupiter + 4.5.1 + test + + + org.hamcrest + hamcrest-library + 1.3 test @@ -54,8 +71,7 @@ long value = (Long) Whitebox.invokeMethod(systemUnderTest, org.apache.maven.plugins maven-compiler-plugin - 1.8 - 1.8 + 21 @@ -719,16 +735,16 @@ public class UtilityClass { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -761,23 +777,25 @@ public class ClientBOTest { assertEquals(new BigDecimal("11.0"), temp.getValue()); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum1() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - List products = new ArrayList(); + List products = new ArrayList(); - products.add(new ProductImpl(100, "Product 15", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); - products.add(new ProductImpl(120, "Product 20", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("6.0"), Currency.EURO))); + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); - @SuppressWarnings("unused") - Amount temp = null; + @SuppressWarnings("unused") + Amount temp = null; - temp = clientBO.getClientProductsSum(products); + temp = clientBO.getClientProductsSum(products); + }); } @Test @@ -801,15 +819,16 @@ public class ClientBOTest { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -840,18 +859,21 @@ public class ClientBOTestRefactored { assertAmount(actual, expected); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum_DifferentCurrencies_ThrowsException() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - Amount[] amounts = { - new AmountImpl(new BigDecimal("5.0"), Currency.EURO), - new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE) }; + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE)}; - List products = createProductListWithAmounts(amounts); + List products = createProductListWithAmounts(amounts); - @SuppressWarnings("unused") - Amount actual = clientBO.getClientProductsSum(products); + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + + }); } @@ -891,8 +913,8 @@ public class ClientBOTestRefactored { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -900,18 +922,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -983,14 +1005,15 @@ public class TodoBusinessImplMockitoInjectMocksTest { assertEquals("Learn to Dance", stringArgumentCaptor.getValue()); } } + ``` ### /src/test/java/com/in28minutes/business/TodoBusinessImplMockitoRulesTest.java ``` package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -998,23 +1021,20 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; @@ -1091,8 +1111,8 @@ public class TodoBusinessImplMockitoRulesTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -1101,7 +1121,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -1187,13 +1207,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -1232,11 +1252,13 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysCompareTest { @@ -1248,14 +1270,17 @@ public class ArraysCompareTest { assertArrayEquals(expected, numbers); } - @Test(expected=NullPointerException.class) + @Test public void testArraySort_NullArray() { - int[] numbers = null; - Arrays.sort(numbers); + assertThrows(NullPointerException.class, () -> { + int[] numbers = null; + Arrays.sort(numbers); + }); } - - @Test(timeout=100) - public void testSort_Performance(){ + + @Test + @Timeout(value = 100) + public void testSort_Performance() { int array[] = {12,23,4}; for(int i=1;i<=1000000;i++) { @@ -1265,21 +1290,21 @@ public class ArraysCompareTest { } } + ``` ### /src/test/java/com/in28minutes/junit/helper/ArraysTest.java ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - - import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysTest { - @Test(timeout=100) - public void testPerformance() { + @Test + @Timeout(value = 100) + public void performance() { for(int i=0;i<1000000;i++){ Arrays.sort(new int[]{i,i-1,i+1}); } @@ -1290,22 +1315,20 @@ public class ArraysTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class QuickBeforeAfterTest { - - @BeforeClass + + @BeforeAll public static void beforeClass(){ System.out.println("Before Class"); } - - @Before + + @BeforeEach public void setup(){ System.out.println("Before Test"); } @@ -1319,35 +1342,32 @@ public class QuickBeforeAfterTest { public void test2() { System.out.println("test2 executed"); } - - @After + + @AfterEach public void teardown() { System.out.println("After test"); } - - @AfterClass + + @AfterAll public static void afterClass(){ System.out.println("After Class"); } } + ``` ### /src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.Collection; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; -@RunWith(Parameterized.class) public class StringHelperParameterizedTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA @@ -1356,13 +1376,12 @@ public class StringHelperParameterizedTest { private String input; private String expectedOutput; - - public StringHelperParameterizedTest(String input, String expectedOutput) { + + public void initStringHelperParameterizedTest(String input, String expectedOutput) { this.input = input; this.expectedOutput = expectedOutput; } - @Parameters public static Collection testConditions() { String expectedOutputs[][] = { { "AACD", "CD" }, @@ -1370,8 +1389,10 @@ public class StringHelperParameterizedTest { return Arrays.asList(expectedOutputs); } - @Test - public void testTruncateAInFirst2Positions() { + @MethodSource("testConditions") + @ParameterizedTest + public void truncateAInFirst2Positions(String input, String expectedOutput) { + initStringHelperParameterizedTest(input, expectedOutput); assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input)); } @@ -1381,22 +1402,22 @@ public class StringHelperParameterizedTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class StringHelperTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA StringHelper helper; - - @Before + + @BeforeEach public void before(){ helper = new StringHelper(); } - + @Test public void testTruncateAInFirst2Positions_AinFirst2Positions() { @@ -1423,20 +1444,19 @@ public class StringHelperTest { } + ``` ### /src/test/java/com/in28minutes/junit/suite/DummyTestSuite.java ``` package com.in28minutes.junit.suite; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - import com.in28minutes.junit.helper.ArraysTest; import com.in28minutes.junit.helper.StringHelperTest; +import org.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; -@RunWith(Suite.class) -@SuiteClasses({ArraysTest.class,StringHelperTest.class}) +@Suite +@SelectClasses({ArraysTest.class,StringHelperTest.class}) public class DummyTestSuite { } @@ -1445,9 +1465,9 @@ public class DummyTestSuite { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -1457,6 +1477,7 @@ public class FirstMockitoTest { } } + ``` ### /src/test/java/com/in28minutes/mockito/HamcrestMatcherTest.java ``` @@ -1476,7 +1497,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -1506,16 +1527,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -1543,12 +1563,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test @@ -1578,15 +1600,14 @@ public class ListTest { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.stub; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class SpyTest { @@ -1602,44 +1623,27 @@ public class SpyTest { assertEquals(2, listSpy.size()); assertEquals("Ranga", listSpy.get(0)); } - - @Test - public void creatingASpyOnArrayList_overridingSpecificMethods() { - List listSpy = spy(ArrayList.class); - listSpy.add("Ranga"); - listSpy.add("in28Minutes"); - - stub(listSpy.size()).toReturn(-1); - - assertEquals(-1, listSpy.size()); - assertEquals("Ranga", listSpy.get(0)); - - // @Spy Annotation - } - } ``` -### /src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java +### /src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java ``` package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ UtilityClass.class /*The class with static method to be mocked*/}) -public class PowerMockitoMockingStaticMethodTest { +@ExtendWith(MockitoExtension.class) +public class MockitoMockingStaticMethodTest { @Mock Dependency dependencyMock; @@ -1649,25 +1653,15 @@ public class PowerMockitoMockingStaticMethodTest { @Test public void powerMockito_MockingAStaticMethodCall() { + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); - - PowerMockito.mockStatic(UtilityClass.class); + MockedStatic mockedStatic = mockStatic(UtilityClass.class); - when(UtilityClass.staticMethod(anyLong())).thenReturn(150); + mockedStatic.when(() -> UtilityClass.staticMethod(anyLong())).thenReturn(150); assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); - //To verify a specific method call - //First : Call PowerMockito.verifyStatic() - //Second : Call the method to be verified - PowerMockito.verifyStatic(); - UtilityClass.staticMethod(1 + 2 + 3); - - // verify exact number of calls - //PowerMockito.verifyStatic(Mockito.times(1)); - + mockedStatic.verify(() -> UtilityClass.staticMethod(1 + 2 + 3), times(1)); } } ``` @@ -1675,19 +1669,19 @@ public class PowerMockitoMockingStaticMethodTest { ``` package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; +import java.lang.reflect.Method; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) +@ExtendWith(MockitoExtension.class) public class PowerMockitoTestingPrivateMethodTest { @Mock @@ -1698,10 +1692,10 @@ public class PowerMockitoTestingPrivateMethodTest { @Test public void powerMockito_CallingAPrivateMethod() throws Exception { - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); - long value = (Long) Whitebox.invokeMethod(systemUnderTest, - "privateMethodUnderTest"); + Method method = systemUnderTest.getClass().getDeclaredMethod("privateMethodUnderTest"); + method.setAccessible(true); + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); + long value = (Long) method.invoke(systemUnderTest); assertEquals(6, value); } } diff --git a/Step17.md b/Step17.md index 80fd744..0c206f4 100644 --- a/Step17.md +++ b/Step17.md @@ -14,34 +14,51 @@ mockito-tutorial 0.0.1-SNAPSHOT + + org.junit.jupiter + junit-jupiter + 5.10.2 + test + - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter-api + 5.10.2 test + + org.junit.platform + junit-platform-suite-engine + 1.10.2 + org.mockito - mockito-all - 1.10.19 + mockito-inline + 3.6.0 test org.hamcrest - hamcrest-library - 1.3 + hamcrest + 2.2 + test + + + org.mockito + mockito-core + 5.4.0 test - org.powermock - powermock-api-mockito - 1.6.4 + org.mockito + mockito-junit-jupiter + 4.5.1 test - org.powermock - powermock-module-junit4 - 1.6.4 + org.hamcrest + hamcrest-library + 1.3 test @@ -51,8 +68,7 @@ org.apache.maven.plugins maven-compiler-plugin - 1.8 - 1.8 + 21 @@ -716,16 +732,16 @@ public class UtilityClass { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -758,23 +774,25 @@ public class ClientBOTest { assertEquals(new BigDecimal("11.0"), temp.getValue()); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum1() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - List products = new ArrayList(); + List products = new ArrayList(); - products.add(new ProductImpl(100, "Product 15", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); + products.add(new ProductImpl(100, "Product 15", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("5.0"), Currency.INDIAN_RUPEE))); - products.add(new ProductImpl(120, "Product 20", - ProductType.BANK_GUARANTEE, new AmountImpl( - new BigDecimal("6.0"), Currency.EURO))); + products.add(new ProductImpl(120, "Product 20", + ProductType.BANK_GUARANTEE, new AmountImpl( + new BigDecimal("6.0"), Currency.EURO))); - @SuppressWarnings("unused") - Amount temp = null; + @SuppressWarnings("unused") + Amount temp = null; - temp = clientBO.getClientProductsSum(products); + temp = clientBO.getClientProductsSum(products); + }); } @Test @@ -798,15 +816,16 @@ public class ClientBOTest { ``` package com.clarity.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import com.in28minutes.junit.business.ClientBO; + +import org.junit.jupiter.api.Test; import com.in28minutes.junit.business.ClientBOImpl; import com.in28minutes.junit.business.exception.DifferentCurrenciesException; import com.in28minutes.junit.model.Amount; @@ -837,18 +856,21 @@ public class ClientBOTestRefactored { assertAmount(actual, expected); } - @Test(expected = DifferentCurrenciesException.class) + @Test public void testClientProductSum_DifferentCurrencies_ThrowsException() throws DifferentCurrenciesException { + assertThrows(DifferentCurrenciesException.class, () -> { - Amount[] amounts = { - new AmountImpl(new BigDecimal("5.0"), Currency.EURO), - new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE) }; + Amount[] amounts = { + new AmountImpl(new BigDecimal("5.0"), Currency.EURO), + new AmountImpl(new BigDecimal("6.0"), Currency.INDIAN_RUPEE)}; - List products = createProductListWithAmounts(amounts); + List products = createProductListWithAmounts(amounts); - @SuppressWarnings("unused") - Amount actual = clientBO.getClientProductsSum(products); + @SuppressWarnings("unused") + Amount actual = clientBO.getClientProductsSum(products); + + }); } @@ -888,8 +910,8 @@ public class ClientBOTestRefactored { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -897,18 +919,18 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoInjectMocksTest { @Mock TodoService todoService; @@ -986,8 +1008,8 @@ public class TodoBusinessImplMockitoInjectMocksTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -995,23 +1017,20 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; +import org.mockito.junit.jupiter.MockitoExtension; import com.in28minutes.data.api.TodoService; +@ExtendWith(MockitoExtension.class) public class TodoBusinessImplMockitoRulesTest { - @Rule - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Mock TodoService todoService; @@ -1088,8 +1107,8 @@ public class TodoBusinessImplMockitoRulesTest { package com.in28minutes.business; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -1098,7 +1117,7 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -1184,13 +1203,13 @@ public class TodoBusinessImplMockitoTest { ``` package com.in28minutes.business; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; -import org.junit.Test; - import com.in28minutes.data.api.TodoService; + +import org.junit.jupiter.api.Test; import com.in28minutes.data.stub.TodoServiceStub; public class TodoBusinessImplStubTest { @@ -1229,11 +1248,13 @@ public class TodoServiceStub implements TodoService { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysCompareTest { @@ -1245,14 +1266,17 @@ public class ArraysCompareTest { assertArrayEquals(expected, numbers); } - @Test(expected=NullPointerException.class) + @Test public void testArraySort_NullArray() { - int[] numbers = null; - Arrays.sort(numbers); + assertThrows(NullPointerException.class, () -> { + int[] numbers = null; + Arrays.sort(numbers); + }); } - - @Test(timeout=100) - public void testSort_Performance(){ + + @Test + @Timeout(value = 100) + public void testSort_Performance() { int array[] = {12,23,4}; for(int i=1;i<=1000000;i++) { @@ -1267,16 +1291,15 @@ public class ArraysCompareTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - - import java.util.Arrays; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; public class ArraysTest { - @Test(timeout=100) - public void testPerformance() { + @Test + @Timeout(value = 100) + public void performance() { for(int i=0;i<1000000;i++){ Arrays.sort(new int[]{i,i-1,i+1}); } @@ -1287,22 +1310,20 @@ public class ArraysTest { ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class QuickBeforeAfterTest { - - @BeforeClass + + @BeforeAll public static void beforeClass(){ System.out.println("Before Class"); } - - @Before + + @BeforeEach public void setup(){ System.out.println("Before Test"); } @@ -1316,35 +1337,32 @@ public class QuickBeforeAfterTest { public void test2() { System.out.println("test2 executed"); } - - @After + + @AfterEach public void teardown() { System.out.println("After test"); } - - @AfterClass + + @AfterAll public static void afterClass(){ System.out.println("After Class"); } } + ``` ### /src/test/java/com/in28minutes/junit/helper/StringHelperParameterizedTest.java ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.Collection; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; -@RunWith(Parameterized.class) public class StringHelperParameterizedTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA @@ -1353,13 +1371,12 @@ public class StringHelperParameterizedTest { private String input; private String expectedOutput; - - public StringHelperParameterizedTest(String input, String expectedOutput) { + + public void initStringHelperParameterizedTest(String input, String expectedOutput) { this.input = input; this.expectedOutput = expectedOutput; } - @Parameters public static Collection testConditions() { String expectedOutputs[][] = { { "AACD", "CD" }, @@ -1367,33 +1384,36 @@ public class StringHelperParameterizedTest { return Arrays.asList(expectedOutputs); } - @Test - public void testTruncateAInFirst2Positions() { + @MethodSource("testConditions") + @ParameterizedTest + public void truncateAInFirst2Positions(String input, String expectedOutput) { + initStringHelperParameterizedTest(input, expectedOutput); assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input)); } } + ``` ### /src/test/java/com/in28minutes/junit/helper/StringHelperTest.java ``` package com.in28minutes.junit.helper; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; public class StringHelperTest { // AACD => CD ACD => CD CDEF=>CDEF CDAA => CDAA StringHelper helper; - - @Before + + @BeforeEach public void before(){ helper = new StringHelper(); } - + @Test public void testTruncateAInFirst2Positions_AinFirst2Positions() { @@ -1425,15 +1445,13 @@ public class StringHelperTest { ``` package com.in28minutes.junit.suite; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - import com.in28minutes.junit.helper.ArraysTest; import com.in28minutes.junit.helper.StringHelperTest; +import org.junit.platform.suite.api.SelectClasses; +import org.junit.platform.suite.api.Suite; -@RunWith(Suite.class) -@SuiteClasses({ArraysTest.class,StringHelperTest.class}) +@Suite +@SelectClasses({ArraysTest.class,StringHelperTest.class}) public class DummyTestSuite { } @@ -1442,9 +1460,9 @@ public class DummyTestSuite { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class FirstMockitoTest { @@ -1473,7 +1491,7 @@ import static org.hamcrest.core.Every.everyItem; import java.util.Arrays; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class HamcrestMatcherTest { @@ -1503,16 +1521,15 @@ public class HamcrestMatcherTest { package com.in28minutes.mockito; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; public class ListTest { @@ -1540,12 +1557,14 @@ public class ListTest { assertNull(list.get(1)); } - @Test(expected = RuntimeException.class) + @Test public void letsMockListGetToThrowException() { - List list = mock(List.class); - when(list.get(Mockito.anyInt())).thenThrow( - new RuntimeException("Something went wrong")); - list.get(0); + assertThrows(RuntimeException.class, () -> { + List list = mock(List.class); + when(list.get(Mockito.anyInt())).thenThrow( + new RuntimeException("Something went wrong")); + list.get(0); + }); } @Test @@ -1575,15 +1594,14 @@ public class ListTest { ``` package com.in28minutes.mockito; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.stub; import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; -import org.junit.Test; +import org.junit.jupiter.api.Test; public class SpyTest { @@ -1599,90 +1617,28 @@ public class SpyTest { assertEquals(2, listSpy.size()); assertEquals("Ranga", listSpy.get(0)); } - - @Test - public void creatingASpyOnArrayList_overridingSpecificMethods() { - List listSpy = spy(ArrayList.class); - listSpy.add("Ranga"); - listSpy.add("in28Minutes"); - - stub(listSpy.size()).toReturn(-1); - - assertEquals(-1, listSpy.size()); - assertEquals("Ranga", listSpy.get(0)); - - // @Spy Annotation - } - } ``` -### /src/test/java/com/in28minutes/powermock/PowerMockitoMockingConstructorTest.java -``` -package com.in28minutes.powermock; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.stub; - -import java.util.ArrayList; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ SystemUnderTest.class /*To be able to mock the Constructor, we need to add in the Class that creates the new object*/}) -public class PowerMockitoMockingConstructorTest { - - private static final int SOME_DUMMY_SIZE = 100; - - @Mock - Dependency dependencyMock; - - @InjectMocks - SystemUnderTest systemUnderTest; - @Test - public void powerMockito_MockingAConstructor() throws Exception { - - ArrayList mockList = mock(ArrayList.class); - - stub(mockList.size()).toReturn(SOME_DUMMY_SIZE); - - PowerMockito.whenNew(ArrayList.class).withAnyArguments().thenReturn( - mockList); - - int size = systemUnderTest.methodUsingAnArrayListConstructor(); - - assertEquals(SOME_DUMMY_SIZE, size); - } -} -``` -### /src/test/java/com/in28minutes/powermock/PowerMockitoMockingStaticMethodTest.java +### /src/test/java/com/in28minutes/powermock/MockitoMockingStaticMethodTest.java ``` package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ UtilityClass.class /*The class with static method to be mocked*/}) -public class PowerMockitoMockingStaticMethodTest { +@ExtendWith(MockitoExtension.class) +public class MockitoMockingStaticMethodTest { @Mock Dependency dependencyMock; @@ -1692,25 +1648,15 @@ public class PowerMockitoMockingStaticMethodTest { @Test public void powerMockito_MockingAStaticMethodCall() { + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); + MockedStatic mockedStatic = mockStatic(UtilityClass.class); - PowerMockito.mockStatic(UtilityClass.class); - - when(UtilityClass.staticMethod(anyLong())).thenReturn(150); + mockedStatic.when(() -> UtilityClass.staticMethod(anyLong())).thenReturn(150); assertEquals(150, systemUnderTest.methodCallingAStaticMethod()); - //To verify a specific method call - //First : Call PowerMockito.verifyStatic() - //Second : Call the method to be verified - PowerMockito.verifyStatic(); - UtilityClass.staticMethod(1 + 2 + 3); - - // verify exact number of calls - //PowerMockito.verifyStatic(Mockito.times(1)); - + mockedStatic.verify(() -> UtilityClass.staticMethod(1 + 2 + 3), times(1)); } } ``` @@ -1718,19 +1664,19 @@ public class PowerMockitoMockingStaticMethodTest { ``` package com.in28minutes.powermock; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; +import java.lang.reflect.Method; import java.util.Arrays; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(PowerMockRunner.class) +@ExtendWith(MockitoExtension.class) public class PowerMockitoTestingPrivateMethodTest { @Mock @@ -1741,10 +1687,10 @@ public class PowerMockitoTestingPrivateMethodTest { @Test public void powerMockito_CallingAPrivateMethod() throws Exception { - when(dependencyMock.retrieveAllStats()).thenReturn( - Arrays.asList(1, 2, 3)); - long value = (Long) Whitebox.invokeMethod(systemUnderTest, - "privateMethodUnderTest"); + Method method = systemUnderTest.getClass().getDeclaredMethod("privateMethodUnderTest"); + method.setAccessible(true); + when(dependencyMock.retrieveAllStats()).thenReturn(Arrays.asList(1, 2, 3)); + long value = (Long) method.invoke(systemUnderTest); assertEquals(6, value); } }