From f5b372a21e7d0b5799e5c2027416f3cfbadf21f0 Mon Sep 17 00:00:00 2001 From: Chris Searle Date: Thu, 11 Jan 2024 14:12:38 +0100 Subject: [PATCH] Update - and add some exercises --- .github/workflows/CI.yml | 4 +- build.gradle.kts | 13 +- gradlew.bat | 2 +- readme.md | 207 ++++++++++++++---- .../itera/test/TestApplication.java | 2 +- .../test/controller/DataJavaController.java | 8 +- .../test/controller/DummyJavaController.java | 4 +- .../test/controller/ExceptionAdvice.java | 4 +- .../itera/test/domain/DataJava.java | 2 +- .../test/domain/DataNotFoundException.java | 2 +- .../test/repository/DataJavaRepository.java | 4 +- .../test/repository/DummyRepository.java | 2 +- .../test/repository/DummyRepositoryImpl.java | 2 +- .../itera/test/service/DataJavaService.java | 6 +- .../itera/test/service/DummyJavaService.java | 4 +- .../{no => com}/itera/test/Extensions.kt | 2 +- .../test/controller/DataKotlinController.kt | 4 +- .../test/controller/DummyKotlinController.kt | 4 +- .../itera/test/domain/DataKotlin.kt | 2 +- .../test/repository/DataKotlinRepository.kt | 4 +- .../test/repository/DummyKotlinRepository.kt | 2 +- .../itera/test/service/DataKotlinService.kt | 8 +- .../itera/test/service/DummyKotlinService.kt | 4 +- .../itera/test/DummyJavaControllerIT.java | 10 +- .../test/basics/SimpleJunitAssertJTest.java | 8 +- .../test/basics/SimpleJunitHamcrestTest.java | 8 +- .../itera/test/basics/SimpleJunitTest.java | 8 +- .../test/basics/SimpleParametricTest.java | 8 +- .../exercise1/SimpleJunitExerciseTest.java | 9 + .../SimpleAssertJAssertionExerciseTest.java | 17 ++ .../SimpleHamcrestAssertionExerciseTest.java | 22 ++ .../SimpleJunitAssertionExerciseTest.java | 21 ++ .../SimpleParametricExerciseTest.java | 23 ++ .../exercise4/JavaServiceMockTest.java | 27 +++ .../exercise5/JavaServiceMockTest.java | 42 ++++ .../test/repository/DataJavaRepositoryIT.java | 4 +- .../test/service/DataJavaServiceMockTest.java | 6 +- .../test/service/DummyJavaServiceIT.java | 9 +- .../service/DummyJavaServiceMockTest.java | 4 +- .../DummyJavaServiceParametricTest.java | 4 +- .../test/service/DummyJavaServiceTest.java | 4 +- .../itera/test/DataKotlinRepositoryIT.kt | 6 +- .../test/DataKotlinServiceMockkFunSpecTest.kt | 12 +- .../itera/test/DummyJavaServiceFunSpecTest.kt | 6 +- .../test/DummyJavaServiceMockkFunSpecTest.kt | 6 +- .../itera/test/SimpleJunitKotlinTest.kt | 2 +- 46 files changed, 438 insertions(+), 124 deletions(-) rename src/main/java/{no => com}/itera/test/TestApplication.java (92%) rename src/main/java/{no => com}/itera/test/controller/DataJavaController.java (82%) rename src/main/java/{no => com}/itera/test/controller/DummyJavaController.java (86%) rename src/main/java/{no => com}/itera/test/controller/ExceptionAdvice.java (86%) rename src/main/java/{no => com}/itera/test/domain/DataJava.java (94%) rename src/main/java/{no => com}/itera/test/domain/DataNotFoundException.java (67%) rename src/main/java/{no => com}/itera/test/repository/DataJavaRepository.java (65%) rename src/main/java/{no => com}/itera/test/repository/DummyRepository.java (62%) rename src/main/java/{no => com}/itera/test/repository/DummyRepositoryImpl.java (84%) rename src/main/java/{no => com}/itera/test/service/DataJavaService.java (79%) rename src/main/java/{no => com}/itera/test/service/DummyJavaService.java (82%) rename src/main/kotlin/{no => com}/itera/test/Extensions.kt (82%) rename src/main/kotlin/{no => com}/itera/test/controller/DataKotlinController.kt (84%) rename src/main/kotlin/{no => com}/itera/test/controller/DummyKotlinController.kt (81%) rename src/main/kotlin/{no => com}/itera/test/domain/DataKotlin.kt (90%) rename src/main/kotlin/{no => com}/itera/test/repository/DataKotlinRepository.kt (63%) rename src/main/kotlin/{no => com}/itera/test/repository/DummyKotlinRepository.kt (86%) rename src/main/kotlin/{no => com}/itera/test/service/DataKotlinService.kt (61%) rename src/main/kotlin/{no => com}/itera/test/service/DummyKotlinService.kt (66%) rename src/test/java/{no => com}/itera/test/DummyJavaControllerIT.java (97%) rename src/test/java/{no => com}/itera/test/basics/SimpleJunitAssertJTest.java (69%) rename src/test/java/{no => com}/itera/test/basics/SimpleJunitHamcrestTest.java (72%) rename src/test/java/{no => com}/itera/test/basics/SimpleJunitTest.java (68%) rename src/test/java/{no => com}/itera/test/basics/SimpleParametricTest.java (85%) create mode 100644 src/test/java/com/itera/test/exercises/exercise1/SimpleJunitExerciseTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise2/SimpleAssertJAssertionExerciseTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise2/SimpleHamcrestAssertionExerciseTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise2/SimpleJunitAssertionExerciseTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise3/SimpleParametricExerciseTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise4/JavaServiceMockTest.java create mode 100644 src/test/java/com/itera/test/exercises/exercise5/JavaServiceMockTest.java rename src/test/java/{no => com}/itera/test/repository/DataJavaRepositoryIT.java (89%) rename src/test/java/{no => com}/itera/test/service/DataJavaServiceMockTest.java (93%) rename src/test/java/{no => com}/itera/test/service/DummyJavaServiceIT.java (66%) rename src/test/java/{no => com}/itera/test/service/DummyJavaServiceMockTest.java (91%) rename src/test/java/{no => com}/itera/test/service/DummyJavaServiceParametricTest.java (91%) rename src/test/java/{no => com}/itera/test/service/DummyJavaServiceTest.java (78%) rename src/test/kotlin/{no => com}/itera/test/DataKotlinRepositoryIT.kt (83%) rename src/test/kotlin/{no => com}/itera/test/DataKotlinServiceMockkFunSpecTest.kt (84%) rename src/test/kotlin/{no => com}/itera/test/DummyJavaServiceFunSpecTest.kt (83%) rename src/test/kotlin/{no => com}/itera/test/DummyJavaServiceMockkFunSpecTest.kt (86%) rename src/test/kotlin/{no => com}/itera/test/SimpleJunitKotlinTest.kt (91%) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 217c455..f60d101 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -10,10 +10,10 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Set up JDK 20 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '20' + java-version: '21' distribution: 'temurin' - name: Validate gradle wrapper diff --git a/build.gradle.kts b/build.gradle.kts index bfe0300..b068c14 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ group = "com.itera" version = "0.0.1" kotlin { - jvmToolchain(20) + jvmToolchain(21) } repositories { @@ -36,7 +36,7 @@ dependencies { tasks { withType { - kotlinOptions { + compilerOptions { freeCompilerArgs = listOf("-Xcontext-receivers") } } @@ -51,8 +51,15 @@ tasks.test { } tasks.jacocoTestReport { + dependsOn(tasks.test) + reports { xml.required.set(true) } - dependsOn(tasks.test) } + + +tasks.named("check") { + dependsOn(tasks.jacocoTestReport) +} + diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..801fb8b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -44,7 +44,7 @@ set JAVA_EXE=java.exe if %ERRORLEVEL% equ 0 goto execute echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo ERROR: JAVA_HOME is not set and com 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. diff --git a/readme.md b/readme.md index 8916c03..6edd205 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ theme: Itera slide-transition: true autoscale: true -# Java Test +# Java/JVM Testing ![inline](logo.svg) @@ -48,7 +48,7 @@ Way too many to cover in one workshop - we will take a look at the following: ## Design for testing -* Follow SOLID - well designed code is usually easier to test +* Follow SOLID - well-designed code is usually easier to test * Injection - prefer constructor to setters or injected properties * Unit tests give more value where they test logic rather than boilerplate * Structure of a test @@ -67,7 +67,9 @@ Classes often have dependencies. These can be provided in several ways - e.g.: * Setter methods * Annotated properties -By using constructor properties - it forces you to create a complete instance - this is good practice both for coding in general as well as testing - for example - the instance property can be set final. +By using constructor properties - it forces you to create a complete instance - this is good practice both for coding in general and testing - for example - the instance property can be set final. + +Setter methods may or may not have been called - so you may have an incomplete object. Annotation based properties are even worse - how do you set them from the test code without starting the annotation system (for example spring). @@ -75,27 +77,27 @@ Annotation based properties are even worse - how do you set them from the test c ```java class ConstructorInjected { - // The internal property can be final - private final Service service; + // The internal property can be final + private final Service service; - // In spring 4.3 - classes with a single constructor no longer need the @Autowired annotation - public ConstructorInjected(Service service) { - this.service = service; - } + // In spring 4.3 - classes with a single constructor no longer need the @Autowired annotation + public ConstructorInjected(Service service) { + this.service = service; + } } class SetterInjected { - // We lose the final marker - private Service service; + // We lose the final marker + private Service service; - public void setService(Service service) { - this.service = service; - } + public void setService(Service service) { + this.service = service; + } } class AnnotatedProperty { - @Autowired - private final Service service; + @Autowired + private final Service service; } ``` @@ -107,7 +109,7 @@ class AnnotatedProperty { This came originally from behaviour driven development - but it applies well to most tests. The test structure is simply: -* Given - setup your initial state +* Given - set up your initial state * When - the action to be tested * Then - the expected results @@ -117,7 +119,7 @@ This came originally from behaviour driven development - but it applies well to ### Naming Conventions -* Both class and test method names are used in the test results so they need to be descriptive. +* Both class and test method names are used in the test results, so they need to be descriptive. * Certain frameworks pick files based on filename [^3]. For example failsafe which we will see under integration tests. A common convention is Test for unit, IT for integration test (this is configurable). * Test method names should be consistent. [^3] * Kotlin test method names are perhaps one of the few places where we can use this form of method naming to advantage (gives a very readable test result output): @@ -133,9 +135,17 @@ This came originally from behaviour driven development - but it applies well to ## Unit test with JUnit 5 * The test function is marked with `@Test` -* We use the built in JUnit assertEquals +* We use the built-in JUnit assertEquals + +Exercise 1: SimpleJunit Exercise -Example: SimpleJunitTest +* Write a test (marked `@Test`) that uses `assertEquals` to test that the method `calculate` returns `5` + +--- + +## Unit test with JUnit 5 + +Example Solution: SimpleJunitTest --- @@ -150,22 +160,87 @@ Which to use us a matter of personal preference and/or project standards. --- +### Exercise 2 + +Investigate the different assertions available from junit, hamcrest and assertj. + +- Start with a simple assertion on equality +- Investigate what other assertions are available + +--- + +### Assertion Examples + +- SimpleJunitTest +- SimpleJunitHamcrestTest +- SimpleJunitAssertJTest + +--- + ## Parametric A parametric test allows us to reuse the same test with a range of different test data sets. The test method is annotated to tell JUnit that it is parameterized and also where to get the data from. -There's a bunch of different sources available[^4] - we'll use MethodSource. +--- -Example: SimpleParametricTest +### Sources + +There's a bunch of different sources available[^4] - some of the most common are: + +- ValueSource - hardcoded string in the annotation +- NullSource/EmptySource/NullAndEmptySource +- EnumSource - pass each value of an enum +- MethodSource - call a method returning Arguments + +You can combine several sources - for example - null/empty and method - to test both with empty values and provided values [^4]: https://junit.org/junit5/docs/current/api/org.junit.jupiter.params/org/junit/jupiter/params/provider/package-summary.html +--- + +#### MethodSource + +- Returns a stream of `Arguments` +- Each `Arguments` contain a complete set of data for a test run: + - input + - expected results + +```java +@ParameterizedTest +@MethodSource("methodName") +void testMethod(T param1, T2 param2, T3 expectedResult) + +... + +static Stream testMethod() { + return Stream.of( + Arguments.of(A, B, ExpectedC), + ... + ) +} +``` + +--- + +### Exercise 3 + +Modify the existing single test to be parameterized and test several calculations + +--- + +### Parametric example + +Example: SimpleParametricTest + + --- ## Unit tests in a real application +We want to test business logic in a service class. This service has a property which is a repository. + Issue - we need to provide a full implementation of the repository to test a non-related method. Things to consider: @@ -200,18 +275,17 @@ For example - we want to test a service - but to have test control over what the ## Simple Mocking example -JUnit needs some help to allow for mocking so we add an extension to the test class and set up our mock dependency: +JUnit needs some help to allow for mocking, so we add an extension to the test class and set up our mock dependency: ```java + @ExtendWith(MockitoExtension.class) class DummyJavaServiceMockTest { - @Mock - DummyRepository dummyRepository; + @Mock + DummyRepository dummyRepository; } ``` -Example: DummyJavaServiceMockTest - --- We can now use that repository in our tests and tell it what to do under certain conditions e.g.: @@ -221,10 +295,10 @@ We can now use that repository in our tests and tell it what to do under certain void testServiceBackendCheck() { // When the repository isUp() is called then we will return value true when(dummyRepository.isUp()).thenReturn(true); - + // Instantiate test service with mock repo DummyJavaService service = new DummyJavaService(dummyRepository); - + // Test Assertions.assertThat(service.backendCheck()).isTrue(); } @@ -232,14 +306,27 @@ void testServiceBackendCheck() { --- +### Exercise 4 + +Complete the tests in JavaServiceMockTest using a mocked repository + +--- + +### Mocking example + +Examples: + +* DummyJavaServiceMockTest (mockito) +* DataKotlinServiceMockkFunSpecTest (mockk) + +--- + ## Simple spying example - argument capture We want to know something about an internal call that our test candidate makes. For that we'll use argument capture. -Example: DataJavaServiceMockTest - As well as using a mocked repository we add a Captor: ```java @@ -253,7 +340,7 @@ We can use this when configuring the mock to capture an argument value: ```java when(repository.findById(captor.capture())) - .thenReturn(Optional.of(new DataJava(1L, "qwerty"))); + .thenReturn(Optional.of(new DataJava(1L, "qwerty"))); ``` And we can test that this was in fact called with the correct value: @@ -264,6 +351,20 @@ Assertions.assertThat(captor.getValue()).isEqualTo(1L); --- +### Exercise 5 + +Complete the tests in JavaServiceMockTest to check the passed argument to findByID using ArgumentCaptor + +--- + +### Captor example + +Example: DataJavaServiceMockTest + +Captor is used in `testSingle()` + +--- + ## Verification We can also check that certain expectations match - how many times a mocked method is called, order of calls etc. @@ -276,15 +377,38 @@ verify(repository, times(1)).findById(any()); Here we use `any()` as matcher - we could also choose to verify with a concrete parameter value. +In kotlin with mockk you can also check that _all_ mocks have been verified: + +```kotlin +verify(exactly = 1) { repository.findById(any()) } + +confirmVerified() // with no params - verify all mocks +``` + + --- ## Integration tests These are tests that spin up the application and test it under a running condition. -We use the failsafe plugin for maven for these. +Different build systems use different ways to signal test types. -One of the default filename matchers for failsafe is **IT.java - we will use that. +For this course we will simply run all tests to keep it simple. + +--- + +### Maven + +For example - in maven we usually use surefire plugin for normal tests but failsafe for integration tests - and these use filenames to distinguish. + +For example - one of the default filename matchers for failsafe is **IT.java. You can also specify different directories etc. + +--- + +### Gradle + +Gradle uses sourceSets to handle this with the ability to set includes and excludes. --- @@ -403,7 +527,6 @@ Two examples - one mock tests the DummyJavaService and the other the DataKotlinS ## Maven testing -All of the above tests can be run within a modern java IDE. However - we use a build system for our projects - most often maven (gradle can also be used in a similar fashion). This will also be how the tests are run when using a CI system. There are three main sets of configuration in the pom.xml file. @@ -419,10 +542,18 @@ Jacoco sets itself up under pre-integration-test and builds the result in post-i --- +## Gradle testing + +Gradle allows you to configure different sourceSets for different types of tests. + +Currently - the new test suites functionality is marked as Incubating - so is not entirely fixed. + +--- + ## CI testing -There are multiple JVM supporting continuous integration systems available - bamboo, jenkins etc - but since this repo is on github - it's set up with a github action. +There are multiple JVM supporting continuous integration systems available - bamboo, jenkins etc. - but since this repo is on GitHub - it's set up with a GitHub action. -Example: .github/workflows/build.yml +Example: `.github/workflows/CI.yml` -In a devops environment we prefer CIs that support configuration as code (github action workflows, Jenkinsfile etc) where the build config is under change control - rather than set up in the CI interface manually. \ No newline at end of file +In a devops environment we prefer CIs that support configuration as code (GitHub action workflows, Jenkinsfile etc.) where the build config is under change control - rather than set up in the CI interface manually. \ No newline at end of file diff --git a/src/main/java/no/itera/test/TestApplication.java b/src/main/java/com/itera/test/TestApplication.java similarity index 92% rename from src/main/java/no/itera/test/TestApplication.java rename to src/main/java/com/itera/test/TestApplication.java index c6c79b8..c34a017 100644 --- a/src/main/java/no/itera/test/TestApplication.java +++ b/src/main/java/com/itera/test/TestApplication.java @@ -1,4 +1,4 @@ -package no.itera.test; +package com.itera.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/main/java/no/itera/test/controller/DataJavaController.java b/src/main/java/com/itera/test/controller/DataJavaController.java similarity index 82% rename from src/main/java/no/itera/test/controller/DataJavaController.java rename to src/main/java/com/itera/test/controller/DataJavaController.java index 8d6a327..3a37ba2 100644 --- a/src/main/java/no/itera/test/controller/DataJavaController.java +++ b/src/main/java/com/itera/test/controller/DataJavaController.java @@ -1,11 +1,11 @@ -package no.itera.test.controller; +package com.itera.test.controller; import java.util.List; import java.util.Optional; -import no.itera.test.domain.DataNotFoundException; -import no.itera.test.domain.DataJava; -import no.itera.test.service.DataJavaService; +import com.itera.test.domain.DataNotFoundException; +import com.itera.test.domain.DataJava; +import com.itera.test.service.DataJavaService; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/no/itera/test/controller/DummyJavaController.java b/src/main/java/com/itera/test/controller/DummyJavaController.java similarity index 86% rename from src/main/java/no/itera/test/controller/DummyJavaController.java rename to src/main/java/com/itera/test/controller/DummyJavaController.java index b8eb3a9..6da2b20 100644 --- a/src/main/java/no/itera/test/controller/DummyJavaController.java +++ b/src/main/java/com/itera/test/controller/DummyJavaController.java @@ -1,6 +1,6 @@ -package no.itera.test.controller; +package com.itera.test.controller; -import no.itera.test.service.DummyJavaService; +import com.itera.test.service.DummyJavaService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/no/itera/test/controller/ExceptionAdvice.java b/src/main/java/com/itera/test/controller/ExceptionAdvice.java similarity index 86% rename from src/main/java/no/itera/test/controller/ExceptionAdvice.java rename to src/main/java/com/itera/test/controller/ExceptionAdvice.java index 3c7d86f..6d849f8 100644 --- a/src/main/java/no/itera/test/controller/ExceptionAdvice.java +++ b/src/main/java/com/itera/test/controller/ExceptionAdvice.java @@ -1,6 +1,6 @@ -package no.itera.test.controller; +package com.itera.test.controller; -import no.itera.test.domain.DataNotFoundException; +import com.itera.test.domain.DataNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; diff --git a/src/main/java/no/itera/test/domain/DataJava.java b/src/main/java/com/itera/test/domain/DataJava.java similarity index 94% rename from src/main/java/no/itera/test/domain/DataJava.java rename to src/main/java/com/itera/test/domain/DataJava.java index 17420d4..dadeb6f 100644 --- a/src/main/java/no/itera/test/domain/DataJava.java +++ b/src/main/java/com/itera/test/domain/DataJava.java @@ -1,4 +1,4 @@ -package no.itera.test.domain; +package com.itera.test.domain; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/src/main/java/no/itera/test/domain/DataNotFoundException.java b/src/main/java/com/itera/test/domain/DataNotFoundException.java similarity index 67% rename from src/main/java/no/itera/test/domain/DataNotFoundException.java rename to src/main/java/com/itera/test/domain/DataNotFoundException.java index 5ddcf99..ad5e18a 100644 --- a/src/main/java/no/itera/test/domain/DataNotFoundException.java +++ b/src/main/java/com/itera/test/domain/DataNotFoundException.java @@ -1,4 +1,4 @@ -package no.itera.test.domain; +package com.itera.test.domain; public class DataNotFoundException extends RuntimeException { } diff --git a/src/main/java/no/itera/test/repository/DataJavaRepository.java b/src/main/java/com/itera/test/repository/DataJavaRepository.java similarity index 65% rename from src/main/java/no/itera/test/repository/DataJavaRepository.java rename to src/main/java/com/itera/test/repository/DataJavaRepository.java index 32b6d66..7a346b9 100644 --- a/src/main/java/no/itera/test/repository/DataJavaRepository.java +++ b/src/main/java/com/itera/test/repository/DataJavaRepository.java @@ -1,6 +1,6 @@ -package no.itera.test.repository; +package com.itera.test.repository; -import no.itera.test.domain.DataJava; +import com.itera.test.domain.DataJava; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/no/itera/test/repository/DummyRepository.java b/src/main/java/com/itera/test/repository/DummyRepository.java similarity index 62% rename from src/main/java/no/itera/test/repository/DummyRepository.java rename to src/main/java/com/itera/test/repository/DummyRepository.java index 3b47169..78ac9cd 100644 --- a/src/main/java/no/itera/test/repository/DummyRepository.java +++ b/src/main/java/com/itera/test/repository/DummyRepository.java @@ -1,4 +1,4 @@ -package no.itera.test.repository; +package com.itera.test.repository; public interface DummyRepository { boolean isUp(); diff --git a/src/main/java/no/itera/test/repository/DummyRepositoryImpl.java b/src/main/java/com/itera/test/repository/DummyRepositoryImpl.java similarity index 84% rename from src/main/java/no/itera/test/repository/DummyRepositoryImpl.java rename to src/main/java/com/itera/test/repository/DummyRepositoryImpl.java index 24c51cf..e179a5c 100644 --- a/src/main/java/no/itera/test/repository/DummyRepositoryImpl.java +++ b/src/main/java/com/itera/test/repository/DummyRepositoryImpl.java @@ -1,4 +1,4 @@ -package no.itera.test.repository; +package com.itera.test.repository; import org.springframework.stereotype.Component; diff --git a/src/main/java/no/itera/test/service/DataJavaService.java b/src/main/java/com/itera/test/service/DataJavaService.java similarity index 79% rename from src/main/java/no/itera/test/service/DataJavaService.java rename to src/main/java/com/itera/test/service/DataJavaService.java index 7d05d11..c8aa014 100644 --- a/src/main/java/no/itera/test/service/DataJavaService.java +++ b/src/main/java/com/itera/test/service/DataJavaService.java @@ -1,10 +1,10 @@ -package no.itera.test.service; +package com.itera.test.service; import java.util.List; import java.util.Optional; -import no.itera.test.domain.DataJava; -import no.itera.test.repository.DataJavaRepository; +import com.itera.test.domain.DataJava; +import com.itera.test.repository.DataJavaRepository; import org.springframework.stereotype.Service; diff --git a/src/main/java/no/itera/test/service/DummyJavaService.java b/src/main/java/com/itera/test/service/DummyJavaService.java similarity index 82% rename from src/main/java/no/itera/test/service/DummyJavaService.java rename to src/main/java/com/itera/test/service/DummyJavaService.java index 48cf6b8..e7950f4 100644 --- a/src/main/java/no/itera/test/service/DummyJavaService.java +++ b/src/main/java/com/itera/test/service/DummyJavaService.java @@ -1,6 +1,6 @@ -package no.itera.test.service; +package com.itera.test.service; -import no.itera.test.repository.DummyRepository; +import com.itera.test.repository.DummyRepository; import org.springframework.stereotype.Service; diff --git a/src/main/kotlin/no/itera/test/Extensions.kt b/src/main/kotlin/com/itera/test/Extensions.kt similarity index 82% rename from src/main/kotlin/no/itera/test/Extensions.kt rename to src/main/kotlin/com/itera/test/Extensions.kt index 4018cfc..fccc4ac 100644 --- a/src/main/kotlin/no/itera/test/Extensions.kt +++ b/src/main/kotlin/com/itera/test/Extensions.kt @@ -1,4 +1,4 @@ -package no.itera.test +package com.itera.test import java.util.* diff --git a/src/main/kotlin/no/itera/test/controller/DataKotlinController.kt b/src/main/kotlin/com/itera/test/controller/DataKotlinController.kt similarity index 84% rename from src/main/kotlin/no/itera/test/controller/DataKotlinController.kt rename to src/main/kotlin/com/itera/test/controller/DataKotlinController.kt index e25aafd..a458af6 100644 --- a/src/main/kotlin/no/itera/test/controller/DataKotlinController.kt +++ b/src/main/kotlin/com/itera/test/controller/DataKotlinController.kt @@ -1,6 +1,6 @@ -package no.itera.test.controller +package com.itera.test.controller -import no.itera.test.service.DataKotlinService +import com.itera.test.service.DataKotlinService import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController diff --git a/src/main/kotlin/no/itera/test/controller/DummyKotlinController.kt b/src/main/kotlin/com/itera/test/controller/DummyKotlinController.kt similarity index 81% rename from src/main/kotlin/no/itera/test/controller/DummyKotlinController.kt rename to src/main/kotlin/com/itera/test/controller/DummyKotlinController.kt index 1f55b0a..bb8e5d7 100644 --- a/src/main/kotlin/no/itera/test/controller/DummyKotlinController.kt +++ b/src/main/kotlin/com/itera/test/controller/DummyKotlinController.kt @@ -1,6 +1,6 @@ -package no.itera.test.controller +package com.itera.test.controller -import no.itera.test.service.DummyKotlinService +import com.itera.test.service.DummyKotlinService import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController diff --git a/src/main/kotlin/no/itera/test/domain/DataKotlin.kt b/src/main/kotlin/com/itera/test/domain/DataKotlin.kt similarity index 90% rename from src/main/kotlin/no/itera/test/domain/DataKotlin.kt rename to src/main/kotlin/com/itera/test/domain/DataKotlin.kt index 493a02a..3cc4c48 100644 --- a/src/main/kotlin/no/itera/test/domain/DataKotlin.kt +++ b/src/main/kotlin/com/itera/test/domain/DataKotlin.kt @@ -1,4 +1,4 @@ -package no.itera.test.domain +package com.itera.test.domain import jakarta.persistence.Entity import jakarta.persistence.GeneratedValue diff --git a/src/main/kotlin/no/itera/test/repository/DataKotlinRepository.kt b/src/main/kotlin/com/itera/test/repository/DataKotlinRepository.kt similarity index 63% rename from src/main/kotlin/no/itera/test/repository/DataKotlinRepository.kt rename to src/main/kotlin/com/itera/test/repository/DataKotlinRepository.kt index b1e005b..80bd087 100644 --- a/src/main/kotlin/no/itera/test/repository/DataKotlinRepository.kt +++ b/src/main/kotlin/com/itera/test/repository/DataKotlinRepository.kt @@ -1,6 +1,6 @@ -package no.itera.test.repository +package com.itera.test.repository -import no.itera.test.domain.DataKotlin +import com.itera.test.domain.DataKotlin import org.springframework.data.jpa.repository.JpaRepository interface DataKotlinRepository : JpaRepository diff --git a/src/main/kotlin/no/itera/test/repository/DummyKotlinRepository.kt b/src/main/kotlin/com/itera/test/repository/DummyKotlinRepository.kt similarity index 86% rename from src/main/kotlin/no/itera/test/repository/DummyKotlinRepository.kt rename to src/main/kotlin/com/itera/test/repository/DummyKotlinRepository.kt index 03c369b..e834d95 100644 --- a/src/main/kotlin/no/itera/test/repository/DummyKotlinRepository.kt +++ b/src/main/kotlin/com/itera/test/repository/DummyKotlinRepository.kt @@ -1,4 +1,4 @@ -package no.itera.test.repository +package com.itera.test.repository import org.springframework.stereotype.Component diff --git a/src/main/kotlin/no/itera/test/service/DataKotlinService.kt b/src/main/kotlin/com/itera/test/service/DataKotlinService.kt similarity index 61% rename from src/main/kotlin/no/itera/test/service/DataKotlinService.kt rename to src/main/kotlin/com/itera/test/service/DataKotlinService.kt index e0796db..a24b10c 100644 --- a/src/main/kotlin/no/itera/test/service/DataKotlinService.kt +++ b/src/main/kotlin/com/itera/test/service/DataKotlinService.kt @@ -1,8 +1,8 @@ -package no.itera.test.service +package com.itera.test.service -import no.itera.test.domain.DataNotFoundException -import no.itera.test.repository.DataKotlinRepository -import no.itera.test.unwrap +import com.itera.test.domain.DataNotFoundException +import com.itera.test.repository.DataKotlinRepository +import com.itera.test.unwrap import org.springframework.stereotype.Service @Service diff --git a/src/main/kotlin/no/itera/test/service/DummyKotlinService.kt b/src/main/kotlin/com/itera/test/service/DummyKotlinService.kt similarity index 66% rename from src/main/kotlin/no/itera/test/service/DummyKotlinService.kt rename to src/main/kotlin/com/itera/test/service/DummyKotlinService.kt index 233812a..2ec13c1 100644 --- a/src/main/kotlin/no/itera/test/service/DummyKotlinService.kt +++ b/src/main/kotlin/com/itera/test/service/DummyKotlinService.kt @@ -1,6 +1,6 @@ -package no.itera.test.service +package com.itera.test.service -import no.itera.test.repository.DummyKotlinRepository +import com.itera.test.repository.DummyKotlinRepository import org.springframework.stereotype.Service @Service diff --git a/src/test/java/no/itera/test/DummyJavaControllerIT.java b/src/test/java/com/itera/test/DummyJavaControllerIT.java similarity index 97% rename from src/test/java/no/itera/test/DummyJavaControllerIT.java rename to src/test/java/com/itera/test/DummyJavaControllerIT.java index 5126831..efee0ce 100644 --- a/src/test/java/no/itera/test/DummyJavaControllerIT.java +++ b/src/test/java/com/itera/test/DummyJavaControllerIT.java @@ -1,8 +1,4 @@ -package no.itera.test; - -import static org.hamcrest.Matchers.equalTo; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +package com.itera.test; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +8,10 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import static org.hamcrest.Matchers.equalTo; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @SpringBootTest @AutoConfigureMockMvc class DummyJavaControllerIT { diff --git a/src/test/java/no/itera/test/basics/SimpleJunitAssertJTest.java b/src/test/java/com/itera/test/basics/SimpleJunitAssertJTest.java similarity index 69% rename from src/test/java/no/itera/test/basics/SimpleJunitAssertJTest.java rename to src/test/java/com/itera/test/basics/SimpleJunitAssertJTest.java index 00ec5b7..80c54c7 100644 --- a/src/test/java/no/itera/test/basics/SimpleJunitAssertJTest.java +++ b/src/test/java/com/itera/test/basics/SimpleJunitAssertJTest.java @@ -1,14 +1,18 @@ -package no.itera.test.basics; +package com.itera.test.basics; import static org.assertj.core.api.Assertions.assertThat; import org.junit.jupiter.api.Test; class SimpleJunitAssertJTest { + int calculate() { + return 3 + 2; + } + @Test void simpleJUnitUnitTest() { // Business logic - int result = 3 + 2; + int result = calculate(); // Test assertThat(result).isEqualTo(5); diff --git a/src/test/java/no/itera/test/basics/SimpleJunitHamcrestTest.java b/src/test/java/com/itera/test/basics/SimpleJunitHamcrestTest.java similarity index 72% rename from src/test/java/no/itera/test/basics/SimpleJunitHamcrestTest.java rename to src/test/java/com/itera/test/basics/SimpleJunitHamcrestTest.java index 2112b6c..a7c4e7d 100644 --- a/src/test/java/no/itera/test/basics/SimpleJunitHamcrestTest.java +++ b/src/test/java/com/itera/test/basics/SimpleJunitHamcrestTest.java @@ -1,4 +1,4 @@ -package no.itera.test.basics; +package com.itera.test.basics; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; @@ -6,10 +6,14 @@ import org.junit.jupiter.api.Test; class SimpleJunitHamcrestTest { + int calculate() { + return 3 + 2; + } + @Test void simpleJUnitUnitTest() { // Business logic - int result = 3 + 2; + int result = calculate(); // Test assertThat(result, equalTo(5)); diff --git a/src/test/java/no/itera/test/basics/SimpleJunitTest.java b/src/test/java/com/itera/test/basics/SimpleJunitTest.java similarity index 68% rename from src/test/java/no/itera/test/basics/SimpleJunitTest.java rename to src/test/java/com/itera/test/basics/SimpleJunitTest.java index 88e3869..a198810 100644 --- a/src/test/java/no/itera/test/basics/SimpleJunitTest.java +++ b/src/test/java/com/itera/test/basics/SimpleJunitTest.java @@ -1,14 +1,18 @@ -package no.itera.test.basics; +package com.itera.test.basics; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; class SimpleJunitTest { + int calculate() { + return 3 + 2; + } + @Test void simpleJUnitUnitTest() { // Business logic - int result = 3 + 2; + int result = calculate(); // Test assertEquals(result, 5); diff --git a/src/test/java/no/itera/test/basics/SimpleParametricTest.java b/src/test/java/com/itera/test/basics/SimpleParametricTest.java similarity index 85% rename from src/test/java/no/itera/test/basics/SimpleParametricTest.java rename to src/test/java/com/itera/test/basics/SimpleParametricTest.java index 2425945..cd8c1e6 100644 --- a/src/test/java/no/itera/test/basics/SimpleParametricTest.java +++ b/src/test/java/com/itera/test/basics/SimpleParametricTest.java @@ -1,4 +1,4 @@ -package no.itera.test.basics; +package com.itera.test.basics; import static org.assertj.core.api.Assertions.assertThat; @@ -9,11 +9,15 @@ import org.junit.jupiter.params.provider.MethodSource; class SimpleParametricTest { + int calculate(int x, int y) { + return x + y; + } + @ParameterizedTest @MethodSource("valuesForTest") void simpleTest(int x, int y, int expectedResult) { // Business logic - int result = x + y; + int result = calculate(x, y); // Test assertThat(result).isEqualTo(expectedResult); diff --git a/src/test/java/com/itera/test/exercises/exercise1/SimpleJunitExerciseTest.java b/src/test/java/com/itera/test/exercises/exercise1/SimpleJunitExerciseTest.java new file mode 100644 index 0000000..4d2a223 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise1/SimpleJunitExerciseTest.java @@ -0,0 +1,9 @@ +package com.itera.test.exercises.exercise1; + +public class SimpleJunitExerciseTest { + int calculate() { + return 3 + 2; + } + + // Exercise - create a junit test for the calculate method +} diff --git a/src/test/java/com/itera/test/exercises/exercise2/SimpleAssertJAssertionExerciseTest.java b/src/test/java/com/itera/test/exercises/exercise2/SimpleAssertJAssertionExerciseTest.java new file mode 100644 index 0000000..24cbf72 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise2/SimpleAssertJAssertionExerciseTest.java @@ -0,0 +1,17 @@ +package com.itera.test.exercises.exercise2; + +import org.junit.jupiter.api.Test; + +public class SimpleAssertJAssertionExerciseTest { + int calculate() { + return 3 + 2; + } + + @Test + void simpleJUnitUnitTest() { + // Business logic + int result = calculate(); + + // Test + } +} diff --git a/src/test/java/com/itera/test/exercises/exercise2/SimpleHamcrestAssertionExerciseTest.java b/src/test/java/com/itera/test/exercises/exercise2/SimpleHamcrestAssertionExerciseTest.java new file mode 100644 index 0000000..9146eb9 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise2/SimpleHamcrestAssertionExerciseTest.java @@ -0,0 +1,22 @@ +package com.itera.test.exercises.exercise2; + +import org.junit.jupiter.api.Test; + +public class SimpleHamcrestAssertionExerciseTest { + int calculate() { + return 3 + 2; + } + + // Exercise - complete the test using hamcrest assertion on equality + + @Test + void simpleHamcrestUnitTest() { + // Business logic + int result = calculate(); + + // Test + } + + // Exercise - explore other assertions provided by hamcrest + +} diff --git a/src/test/java/com/itera/test/exercises/exercise2/SimpleJunitAssertionExerciseTest.java b/src/test/java/com/itera/test/exercises/exercise2/SimpleJunitAssertionExerciseTest.java new file mode 100644 index 0000000..669c7f1 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise2/SimpleJunitAssertionExerciseTest.java @@ -0,0 +1,21 @@ +package com.itera.test.exercises.exercise2; + +import org.junit.jupiter.api.Test; + +public class SimpleJunitAssertionExerciseTest { + int calculate() { + return 3 + 2; + } + + // Exercise - complete the test using assertj assertion on equality + + @Test + void simpleAssertJUnitTest() { + // Business logic + int result = calculate(); + + // Test + } + + // Exercise - explore other assertions provided by assertj +} diff --git a/src/test/java/com/itera/test/exercises/exercise3/SimpleParametricExerciseTest.java b/src/test/java/com/itera/test/exercises/exercise3/SimpleParametricExerciseTest.java new file mode 100644 index 0000000..75cc8c6 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise3/SimpleParametricExerciseTest.java @@ -0,0 +1,23 @@ + +package com.itera.test.exercises.exercise3; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SimpleParametricExerciseTest { + int calculate() { + return 3 + 2; + } + + // Exercise - convert the following test to parametric using method source + + @Test + void simpleJUnitUnitTest() { + // Business logic + int result = calculate(); + + // Test + assertEquals(result, 5); + } +} diff --git a/src/test/java/com/itera/test/exercises/exercise4/JavaServiceMockTest.java b/src/test/java/com/itera/test/exercises/exercise4/JavaServiceMockTest.java new file mode 100644 index 0000000..01f7968 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise4/JavaServiceMockTest.java @@ -0,0 +1,27 @@ +package com.itera.test.exercises.exercise4; + +import org.junit.jupiter.api.Test; + + +// Extend with mockito (MockitoExtension) +class JavaServiceMockTest { + // Mock the dummy repository + + @Test + void testServiceBackendCheck() { + // State that when the repository is up is called - return true + + // Create the service using the mocked repository + + // Assert that service.backendCheck returns true + } + + @Test + void testServiceBackendCheckFail() { + // State that when the repository is up is called - return false + + // Create the service using the mocked repository + + // Assert that service.backendCheck returns false + } +} diff --git a/src/test/java/com/itera/test/exercises/exercise5/JavaServiceMockTest.java b/src/test/java/com/itera/test/exercises/exercise5/JavaServiceMockTest.java new file mode 100644 index 0000000..759d017 --- /dev/null +++ b/src/test/java/com/itera/test/exercises/exercise5/JavaServiceMockTest.java @@ -0,0 +1,42 @@ +package com.itera.test.exercises.exercise5; + +import com.itera.test.domain.DataJava; +import com.itera.test.repository.DataJavaRepository; +import com.itera.test.service.DataJavaService; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Optional; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class JavaServiceMockTest { + @Mock + DataJavaRepository repository; + + // Create an ArgumentCaptor to capture a long + + @Test + void testSingle() { + // Use the captor instead of any to capture the ID passed + when(repository.findById(any())).thenReturn(Optional.of(new DataJava(1L, "qwerty"))); + + DataJavaService service = new DataJavaService(repository); + + Optional data = service.getData(1); + + Assertions.assertThat(data).isPresent(); + Assertions.assertThat(data.get().getId()).isEqualTo(1); + Assertions.assertThat(data.get().getName()).isEqualTo("qwerty"); + // Assert that the captured ID is the expected value (1) + + verify(repository, times(1)).findById(any()); + } +} diff --git a/src/test/java/no/itera/test/repository/DataJavaRepositoryIT.java b/src/test/java/com/itera/test/repository/DataJavaRepositoryIT.java similarity index 89% rename from src/test/java/no/itera/test/repository/DataJavaRepositoryIT.java rename to src/test/java/com/itera/test/repository/DataJavaRepositoryIT.java index 0038b3e..38135c3 100644 --- a/src/test/java/no/itera/test/repository/DataJavaRepositoryIT.java +++ b/src/test/java/com/itera/test/repository/DataJavaRepositoryIT.java @@ -1,8 +1,8 @@ -package no.itera.test.repository; +package com.itera.test.repository; import java.util.List; -import no.itera.test.domain.DataJava; +import com.itera.test.domain.DataJava; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/no/itera/test/service/DataJavaServiceMockTest.java b/src/test/java/com/itera/test/service/DataJavaServiceMockTest.java similarity index 93% rename from src/test/java/no/itera/test/service/DataJavaServiceMockTest.java rename to src/test/java/com/itera/test/service/DataJavaServiceMockTest.java index 3d11a8a..184fcb8 100644 --- a/src/test/java/no/itera/test/service/DataJavaServiceMockTest.java +++ b/src/test/java/com/itera/test/service/DataJavaServiceMockTest.java @@ -1,4 +1,4 @@ -package no.itera.test.service; +package com.itera.test.service; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @@ -8,8 +8,8 @@ import java.util.Collections; import java.util.Optional; -import no.itera.test.domain.DataJava; -import no.itera.test.repository.DataJavaRepository; +import com.itera.test.domain.DataJava; +import com.itera.test.repository.DataJavaRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/no/itera/test/service/DummyJavaServiceIT.java b/src/test/java/com/itera/test/service/DummyJavaServiceIT.java similarity index 66% rename from src/test/java/no/itera/test/service/DummyJavaServiceIT.java rename to src/test/java/com/itera/test/service/DummyJavaServiceIT.java index 04aaecb..d8ff357 100644 --- a/src/test/java/no/itera/test/service/DummyJavaServiceIT.java +++ b/src/test/java/com/itera/test/service/DummyJavaServiceIT.java @@ -1,7 +1,6 @@ -package no.itera.test.service; - -import static org.junit.jupiter.api.Assertions.assertEquals; +package com.itera.test.service; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -12,9 +11,9 @@ public class DummyJavaServiceIT { private DummyJavaService service; @Test - void testStatus() throws Exception { + void testStatus() { boolean result = service.backendCheck(); - assertEquals(result, true); + Assertions.assertTrue(result); } } diff --git a/src/test/java/no/itera/test/service/DummyJavaServiceMockTest.java b/src/test/java/com/itera/test/service/DummyJavaServiceMockTest.java similarity index 91% rename from src/test/java/no/itera/test/service/DummyJavaServiceMockTest.java rename to src/test/java/com/itera/test/service/DummyJavaServiceMockTest.java index 9afda04..85171bc 100644 --- a/src/test/java/no/itera/test/service/DummyJavaServiceMockTest.java +++ b/src/test/java/com/itera/test/service/DummyJavaServiceMockTest.java @@ -1,8 +1,8 @@ -package no.itera.test.service; +package com.itera.test.service; import static org.mockito.Mockito.when; -import no.itera.test.repository.DummyRepository; +import com.itera.test.repository.DummyRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/no/itera/test/service/DummyJavaServiceParametricTest.java b/src/test/java/com/itera/test/service/DummyJavaServiceParametricTest.java similarity index 91% rename from src/test/java/no/itera/test/service/DummyJavaServiceParametricTest.java rename to src/test/java/com/itera/test/service/DummyJavaServiceParametricTest.java index 2903a4f..69bf477 100644 --- a/src/test/java/no/itera/test/service/DummyJavaServiceParametricTest.java +++ b/src/test/java/com/itera/test/service/DummyJavaServiceParametricTest.java @@ -1,8 +1,8 @@ -package no.itera.test.service; +package com.itera.test.service; import java.util.stream.Stream; -import no.itera.test.repository.DummyRepositoryImpl; +import com.itera.test.repository.DummyRepositoryImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; diff --git a/src/test/java/no/itera/test/service/DummyJavaServiceTest.java b/src/test/java/com/itera/test/service/DummyJavaServiceTest.java similarity index 78% rename from src/test/java/no/itera/test/service/DummyJavaServiceTest.java rename to src/test/java/com/itera/test/service/DummyJavaServiceTest.java index 510d1a8..d069ed7 100644 --- a/src/test/java/no/itera/test/service/DummyJavaServiceTest.java +++ b/src/test/java/com/itera/test/service/DummyJavaServiceTest.java @@ -1,6 +1,6 @@ -package no.itera.test.service; +package com.itera.test.service; -import no.itera.test.repository.DummyRepositoryImpl; +import com.itera.test.repository.DummyRepositoryImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/kotlin/no/itera/test/DataKotlinRepositoryIT.kt b/src/test/kotlin/com/itera/test/DataKotlinRepositoryIT.kt similarity index 83% rename from src/test/kotlin/no/itera/test/DataKotlinRepositoryIT.kt rename to src/test/kotlin/com/itera/test/DataKotlinRepositoryIT.kt index d034d97..ebb5381 100644 --- a/src/test/kotlin/no/itera/test/DataKotlinRepositoryIT.kt +++ b/src/test/kotlin/com/itera/test/DataKotlinRepositoryIT.kt @@ -1,7 +1,7 @@ -package no.itera.test +package com.itera.test +import com.itera.test.repository.DataKotlinRepository import io.kotest.matchers.shouldBe -import no.itera.test.repository.DataKotlinRepository import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired @@ -10,7 +10,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension @ExtendWith(SpringExtension::class) @DataJpaTest -class DataKotlinRepositoryIT { +open class DataKotlinRepositoryIT { @Autowired private lateinit var repository: DataKotlinRepository diff --git a/src/test/kotlin/no/itera/test/DataKotlinServiceMockkFunSpecTest.kt b/src/test/kotlin/com/itera/test/DataKotlinServiceMockkFunSpecTest.kt similarity index 84% rename from src/test/kotlin/no/itera/test/DataKotlinServiceMockkFunSpecTest.kt rename to src/test/kotlin/com/itera/test/DataKotlinServiceMockkFunSpecTest.kt index f7b142a..d6b3615 100644 --- a/src/test/kotlin/no/itera/test/DataKotlinServiceMockkFunSpecTest.kt +++ b/src/test/kotlin/com/itera/test/DataKotlinServiceMockkFunSpecTest.kt @@ -1,5 +1,9 @@ -package no.itera.test +package com.itera.test +import com.itera.test.domain.DataKotlin +import com.itera.test.domain.DataNotFoundException +import com.itera.test.repository.DataKotlinRepository +import com.itera.test.service.DataKotlinService import io.kotest.assertions.throwables.shouldThrow import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe @@ -8,11 +12,7 @@ import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify -import no.itera.test.domain.DataKotlin -import no.itera.test.domain.DataNotFoundException -import no.itera.test.repository.DataKotlinRepository -import no.itera.test.service.DataKotlinService -import java.util.* +import java.util.Optional class DataKotlinServiceMockkFunSpecTest : FunSpec({ val repository = mockk() diff --git a/src/test/kotlin/no/itera/test/DummyJavaServiceFunSpecTest.kt b/src/test/kotlin/com/itera/test/DummyJavaServiceFunSpecTest.kt similarity index 83% rename from src/test/kotlin/no/itera/test/DummyJavaServiceFunSpecTest.kt rename to src/test/kotlin/com/itera/test/DummyJavaServiceFunSpecTest.kt index 6d54329..5f126ed 100644 --- a/src/test/kotlin/no/itera/test/DummyJavaServiceFunSpecTest.kt +++ b/src/test/kotlin/com/itera/test/DummyJavaServiceFunSpecTest.kt @@ -1,10 +1,10 @@ -package no.itera.test +package com.itera.test +import com.itera.test.repository.DummyRepositoryImpl +import com.itera.test.service.DummyJavaService import io.kotest.core.spec.style.FunSpec import io.kotest.core.test.TestCase import io.kotest.matchers.shouldBe -import no.itera.test.repository.DummyRepositoryImpl -import no.itera.test.service.DummyJavaService class DummyJavaServiceFunSpecTest : FunSpec() { private lateinit var service: DummyJavaService diff --git a/src/test/kotlin/no/itera/test/DummyJavaServiceMockkFunSpecTest.kt b/src/test/kotlin/com/itera/test/DummyJavaServiceMockkFunSpecTest.kt similarity index 86% rename from src/test/kotlin/no/itera/test/DummyJavaServiceMockkFunSpecTest.kt rename to src/test/kotlin/com/itera/test/DummyJavaServiceMockkFunSpecTest.kt index 0421619..fc85184 100644 --- a/src/test/kotlin/no/itera/test/DummyJavaServiceMockkFunSpecTest.kt +++ b/src/test/kotlin/com/itera/test/DummyJavaServiceMockkFunSpecTest.kt @@ -1,13 +1,13 @@ -package no.itera.test +package com.itera.test +import com.itera.test.repository.DummyRepository +import com.itera.test.service.DummyJavaService import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.mockk.clearMocks import io.mockk.every import io.mockk.mockk import io.mockk.verify -import no.itera.test.repository.DummyRepository -import no.itera.test.service.DummyJavaService class DummyJavaServiceMockkFunSpecTest : FunSpec({ val repository = mockk() diff --git a/src/test/kotlin/no/itera/test/SimpleJunitKotlinTest.kt b/src/test/kotlin/com/itera/test/SimpleJunitKotlinTest.kt similarity index 91% rename from src/test/kotlin/no/itera/test/SimpleJunitKotlinTest.kt rename to src/test/kotlin/com/itera/test/SimpleJunitKotlinTest.kt index a6d7f5d..5b39010 100644 --- a/src/test/kotlin/no/itera/test/SimpleJunitKotlinTest.kt +++ b/src/test/kotlin/com/itera/test/SimpleJunitKotlinTest.kt @@ -1,4 +1,4 @@ -package no.itera.test +package com.itera.test import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Test