From d115f2571bde4e6dec290144151a136c18c2a81b Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 11 Oct 2018 18:28:05 -0400 Subject: [PATCH 01/30] adding assertions demo --- .../controllers/IndexController.java | 1 - .../controllers/IndexControllerTest.java | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java diff --git a/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java b/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java index 731a2119..154faf31 100644 --- a/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java +++ b/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java @@ -3,7 +3,6 @@ public class IndexController { public String index(){ - return "index"; } diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java new file mode 100644 index 00000000..759f3e3c --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -0,0 +1,32 @@ +package guru.springframework.sfgpetclinic.controllers; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class IndexControllerTest { + + IndexController controller; + + @BeforeEach + void setUp() { + controller = new IndexController(); + } + + @Test + void index() { + assertEquals("index", controller.index()); + assertEquals("index", controller.index(), "Wrong View Returned"); + + assertEquals("index", controller.index(), () -> "Another Expensive Message " + + "Make me only if you have to"); + } + + @Test + void oupsHandler() { + assertTrue("notimplemented".equals(controller.oupsHandler()), () -> "This is some expensive " + + "Message to build" + + "for my test"); + } +} \ No newline at end of file From 7b3a36b44997141c56715dee7fa9d197b050fef2 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 11 Oct 2018 19:38:31 -0400 Subject: [PATCH 02/30] adding grouped assertions --- .../sfgpetclinic/model/PersonTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java new file mode 100644 index 00000000..0ff00034 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -0,0 +1,30 @@ +package guru.springframework.sfgpetclinic.model; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PersonTest { + + @Test + void groupedAssertions() { + //given + Person person = new Person(1l, "Joe", "Buck"); + + //then + assertAll("Test Props Set", + () -> assertEquals(person.getFirstName(), "Joe"), + () -> assertEquals(person.getLastName(), "Buck")); + } + + @Test + void groupedAssertionMsgs() { + //given + Person person = new Person(1l, "Joe", "Buck"); + + //then + assertAll("Test Props Set", + () -> assertEquals(person.getFirstName(), "Joe", "First Name Failed"), + () -> assertEquals(person.getLastName(), "Buck", "Last Name Failed")); + } +} \ No newline at end of file From d0e40f8a6c215288f93b75e193b15b6740cb16b5 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 11 Oct 2018 20:14:52 -0400 Subject: [PATCH 03/30] adding dependent assertions --- .../sfgpetclinic/model/OwnerTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java new file mode 100644 index 00000000..f7cffb2d --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -0,0 +1,25 @@ +package guru.springframework.sfgpetclinic.model; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class OwnerTest { + + @Test + void dependentAssertions() { + + Owner owner = new Owner(1l, "Joe", "Buck"); + owner.setCity("Key West"); + owner.setTelephone("1231231234"); + + assertAll("Properties Test", + () -> assertAll("Person Properties", + () -> assertEquals("Joe", owner.getFirstName(), "First Name Did not Match"), + () -> assertEquals("Buck", owner.getLastName())), + () -> assertAll("Owner Properties", + () -> assertEquals("Key West", owner.getCity(), "City Did Not Match"), + () -> assertEquals("1231231234", owner.getTelephone()) + )); + } +} \ No newline at end of file From e9d9e3de5c3c5f50165231edd7aa1a0f878b39b5 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 11 Oct 2018 20:24:53 -0400 Subject: [PATCH 04/30] skipping tests --- .../springdatajpa/OwnerSDJpaServiceTest.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java new file mode 100644 index 00000000..63294f63 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java @@ -0,0 +1,50 @@ +package guru.springframework.sfgpetclinic.services.springdatajpa; + +import guru.springframework.sfgpetclinic.model.Owner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +@Disabled(value = "Disabled until we learn Mocking") +class OwnerSDJpaServiceTest { + + OwnerSDJpaService service; + + @BeforeEach + void setUp() { + service = new OwnerSDJpaService(null, null, null); + + } + + @Disabled + @Test + void findByLastName() { + Owner foundOwner = service.findByLastName("Buck"); + } + + @Test + void findAllByLastNameLike() { + } + + @Test + void findAll() { + } + + @Test + void findById() { + } + + @Test + void save() { + } + + @Test + void delete() { + } + + @Test + void deleteById() { + } +} \ No newline at end of file From 6c95403f392ae555611d4b62fd6e4a226c7cc3d0 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Mon, 22 Oct 2018 19:42:41 -0400 Subject: [PATCH 05/30] display name example --- .../sfgpetclinic/controllers/IndexControllerTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 759f3e3c..71d14b0c 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -1,6 +1,7 @@ package guru.springframework.sfgpetclinic.controllers; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -14,6 +15,7 @@ void setUp() { controller = new IndexController(); } + @DisplayName("Test Proper View name is returned for index page") @Test void index() { assertEquals("index", controller.index()); @@ -24,6 +26,7 @@ void index() { } @Test + @DisplayName("Test exception") void oupsHandler() { assertTrue("notimplemented".equals(controller.oupsHandler()), () -> "This is some expensive " + "Message to build" + From ec469febb9dc7141d9e9f770a51a7b5ed4ad696a Mon Sep 17 00:00:00 2001 From: John Thompson Date: Mon, 22 Oct 2018 20:02:19 -0400 Subject: [PATCH 06/30] expected exception --- .../sfgpetclinic/controllers/IndexController.java | 4 ++-- .../sfgpetclinic/controllers/ValueNotFoundException.java | 7 +++++++ .../sfgpetclinic/controllers/IndexControllerTest.java | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 src/main/java/guru/springframework/sfgpetclinic/controllers/ValueNotFoundException.java diff --git a/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java b/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java index 154faf31..766601a2 100644 --- a/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java +++ b/src/main/java/guru/springframework/sfgpetclinic/controllers/IndexController.java @@ -6,7 +6,7 @@ public String index(){ return "index"; } - public String oupsHandler(){ - return "notimplemented"; + public String oopsHandler() { + throw new ValueNotFoundException(); } } diff --git a/src/main/java/guru/springframework/sfgpetclinic/controllers/ValueNotFoundException.java b/src/main/java/guru/springframework/sfgpetclinic/controllers/ValueNotFoundException.java new file mode 100644 index 00000000..0f8ad1ad --- /dev/null +++ b/src/main/java/guru/springframework/sfgpetclinic/controllers/ValueNotFoundException.java @@ -0,0 +1,7 @@ +package guru.springframework.sfgpetclinic.controllers; + +/** + * Created by jt on 2018-10-22. + */ +public class ValueNotFoundException extends RuntimeException { +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 71d14b0c..bfb9fb2e 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -28,8 +28,8 @@ void index() { @Test @DisplayName("Test exception") void oupsHandler() { - assertTrue("notimplemented".equals(controller.oupsHandler()), () -> "This is some expensive " + - "Message to build" + - "for my test"); + assertThrows(ValueNotFoundException.class, () -> { + controller.oopsHandler(); + }); } } \ No newline at end of file From a73fcd7892dd6e9d5b72d9c7cbdd2bdba650ae1e Mon Sep 17 00:00:00 2001 From: John Thompson Date: Mon, 22 Oct 2018 20:17:58 -0400 Subject: [PATCH 07/30] timeout demo --- .../controllers/IndexControllerTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index bfb9fb2e..fe857798 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -1,9 +1,12 @@ package guru.springframework.sfgpetclinic.controllers; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.time.Duration; + import static org.junit.jupiter.api.Assertions.*; class IndexControllerTest { @@ -32,4 +35,26 @@ void oupsHandler() { controller.oopsHandler(); }); } + + @Disabled("Demo of timeout") + @Test + void testTimeOut() { + + assertTimeout(Duration.ofMillis(100), () -> { + Thread.sleep(5000); + + System.out.println("I got here"); + }); + } + + @Disabled("Demo of timeout") + @Test + void testTimeOutPrempt() { + + assertTimeoutPreemptively(Duration.ofMillis(100), () -> { + Thread.sleep(5000); + + System.out.println("I got here 2342342342342"); + }); + } } \ No newline at end of file From 163bdcc2f21d60769bcd44de4286ab3ae2f4862d Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 16:39:18 -0400 Subject: [PATCH 08/30] adding assumptions demo --- .../controllers/IndexControllerTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index fe857798..26711128 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -8,6 +8,7 @@ import java.time.Duration; import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeTrue; class IndexControllerTest { @@ -57,4 +58,16 @@ void testTimeOutPrempt() { System.out.println("I got here 2342342342342"); }); } + + @Test + void testAssumptionTrue() { + + assumeTrue("GURU".equalsIgnoreCase(System.getenv("GURU_RUNTIME"))); + } + + @Test + void testAssumptionTrueAssumptionIsTrue() { + + assumeTrue("GURU".equalsIgnoreCase("GURU")); + } } \ No newline at end of file From ca50442c11ce592e8cf3d62cb716be59ecc20696 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 17:18:33 -0400 Subject: [PATCH 09/30] adding conditional testing examples --- .../controllers/IndexControllerTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 26711128..65624b6c 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.*; import java.time.Duration; @@ -70,4 +71,34 @@ void testAssumptionTrueAssumptionIsTrue() { assumeTrue("GURU".equalsIgnoreCase("GURU")); } + + @EnabledOnOs(OS.MAC) + @Test + void testMeOnMacOS() { + } + + @EnabledOnOs(OS.WINDOWS) + @Test + void testMeOnWindows() { + } + + @EnabledOnJre(JRE.JAVA_8) + @Test + void testMeOnJava8() { + } + + @EnabledOnJre(JRE.JAVA_11) + @Test + void testMeOnJava11() { + } + + @EnabledIfEnvironmentVariable(named = "USER", matches = "jt") + @Test + void testIfUserJT() { + } + + @EnabledIfEnvironmentVariable(named = "USER", matches = "fred") + @Test + void testIfUserFred() { + } } \ No newline at end of file From 95520fbd4a5f02ca0d1a92f03700313e57362948 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 17:39:52 -0400 Subject: [PATCH 10/30] adding assertj --- pom.xml | 7 +++++++ .../sfgpetclinic/controllers/IndexControllerTest.java | 3 +++ 2 files changed, 10 insertions(+) diff --git a/pom.xml b/pom.xml index 9bd5d015..b72bf7bf 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,13 @@ ${junit-platform.version} test + + + org.assertj + assertj-core + 3.11.1 + test + diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 65624b6c..6bd803db 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -8,6 +8,7 @@ import java.time.Duration; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.assumeTrue; @@ -28,6 +29,8 @@ void index() { assertEquals("index", controller.index(), () -> "Another Expensive Message " + "Make me only if you have to"); + + assertThat(controller.index()).isEqualTo("index"); } @Test From 6fc3cb7f2659b4720568d3ff12ef16ea3843aff0 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 17:55:52 -0400 Subject: [PATCH 11/30] adding hamcrest --- pom.xml | 7 +++++++ .../guru/springframework/sfgpetclinic/model/OwnerTest.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/pom.xml b/pom.xml index b72bf7bf..802e51cd 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,13 @@ 3.11.1 test + + + org.hamcrest + hamcrest-library + 1.3 + test + diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index f7cffb2d..94ebcb19 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Test; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.*; class OwnerTest { @@ -21,5 +23,7 @@ void dependentAssertions() { () -> assertEquals("Key West", owner.getCity(), "City Did Not Match"), () -> assertEquals("1231231234", owner.getTelephone()) )); + + assertThat(owner.getCity(), is("Key West")); } } \ No newline at end of file From 9e40a3546a16c604b6bdafa8820e0f60bf8f68bc Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 18:21:01 -0400 Subject: [PATCH 12/30] adding example of using tags --- .../sfgpetclinic/controllers/IndexControllerTest.java | 6 ++---- .../guru/springframework/sfgpetclinic/model/OwnerTest.java | 2 ++ .../guru/springframework/sfgpetclinic/model/PersonTest.java | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 6bd803db..b86b8923 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -1,9 +1,6 @@ package guru.springframework.sfgpetclinic.controllers; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.jupiter.api.condition.*; import java.time.Duration; @@ -12,6 +9,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.assumeTrue; +@Tag("controllers") class IndexControllerTest { IndexController controller; diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index 94ebcb19..d18d1e14 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -1,11 +1,13 @@ package guru.springframework.sfgpetclinic.model; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.*; +@Tag("model") class OwnerTest { @Test diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index 0ff00034..c4d9f50a 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -1,9 +1,11 @@ package guru.springframework.sfgpetclinic.model; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; +@Tag("model") class PersonTest { @Test From 43c31899a996564bab92ff8b8700208cc9cbb338 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 25 Oct 2018 19:43:00 -0400 Subject: [PATCH 13/30] completed assignment --- .../services/map/VetMapService.java | 2 +- .../controllers/VetControllerTest.java | 51 +++++++++++++++++++ .../sfgpetclinic/fauxspring/ModelMapImpl.java | 26 ++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java create mode 100644 src/test/java/guru/springframework/sfgpetclinic/fauxspring/ModelMapImpl.java diff --git a/src/main/java/guru/springframework/sfgpetclinic/services/map/VetMapService.java b/src/main/java/guru/springframework/sfgpetclinic/services/map/VetMapService.java index c94fe453..d04f65c9 100644 --- a/src/main/java/guru/springframework/sfgpetclinic/services/map/VetMapService.java +++ b/src/main/java/guru/springframework/sfgpetclinic/services/map/VetMapService.java @@ -28,7 +28,7 @@ public Vet findById(Long id) { @Override public Vet save(Vet object) { - if (object.getSpecialities().size() > 0){ + if (object.getSpecialities() != null && object.getSpecialities().size() > 0){ object.getSpecialities().forEach(speciality -> { if(speciality.getId() == null){ Speciality savedSpecialty = specialtyService.save(speciality); diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java new file mode 100644 index 00000000..39906cff --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java @@ -0,0 +1,51 @@ +package guru.springframework.sfgpetclinic.controllers; + +import guru.springframework.sfgpetclinic.fauxspring.Model; +import guru.springframework.sfgpetclinic.fauxspring.ModelMapImpl; +import guru.springframework.sfgpetclinic.model.Vet; +import guru.springframework.sfgpetclinic.services.SpecialtyService; +import guru.springframework.sfgpetclinic.services.VetService; +import guru.springframework.sfgpetclinic.services.map.SpecialityMapService; +import guru.springframework.sfgpetclinic.services.map.VetMapService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class VetControllerTest { + + VetService vetService; + SpecialtyService specialtyService; + + VetController vetController; + + @BeforeEach + void setUp() { + specialtyService = new SpecialityMapService(); + vetService = new VetMapService(specialtyService); + + vetController = new VetController(vetService); + + Vet vet1 = new Vet(1L, "joe", "buck", null); + Vet vet2 = new Vet(2L, "Jimmy", "Smith", null); + + vetService.save(vet1); + vetService.save(vet2); + } + + @Test + void listVets() { + Model model = new ModelMapImpl(); + + String view = vetController.listVets(model); + + assertThat("vets/index").isEqualTo(view); + + Set modelAttribute = (Set) ((ModelMapImpl) model).getMap().get("vets"); + + assertThat(modelAttribute.size()).isEqualTo(2); + } +} \ No newline at end of file diff --git a/src/test/java/guru/springframework/sfgpetclinic/fauxspring/ModelMapImpl.java b/src/test/java/guru/springframework/sfgpetclinic/fauxspring/ModelMapImpl.java new file mode 100644 index 00000000..9a9d4ad3 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/fauxspring/ModelMapImpl.java @@ -0,0 +1,26 @@ +package guru.springframework.sfgpetclinic.fauxspring; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by jt on 2018-10-25. + */ +public class ModelMapImpl implements Model { + Map map = new HashMap<>(); + + @Override + public void addAttribute(String key, Object o) { + + map.put(key, o); + } + + @Override + public void addAttribute(Object o) { + // do nothing... + } + + public Map getMap() { + return map; + } +} From ffd95b4f157d059c061f0b3adacd35dd455cf6f7 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 10:40:12 -0400 Subject: [PATCH 14/30] nested tests example --- .../services/map/OwnerMapServiceTest.java | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java b/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java new file mode 100644 index 00000000..b6e2ea07 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java @@ -0,0 +1,108 @@ +package guru.springframework.sfgpetclinic.services.map; + +import guru.springframework.sfgpetclinic.model.Owner; +import guru.springframework.sfgpetclinic.model.PetType; +import guru.springframework.sfgpetclinic.services.PetService; +import guru.springframework.sfgpetclinic.services.PetTypeService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@DisplayName("Owner Map Service Test - ") +class OwnerMapServiceTest { + + OwnerMapService ownerMapService; + PetTypeService petTypeService; + PetService petService; + + @BeforeEach + void setUp() { + petTypeService = new PetTypeMapService(); + petService = new PetMapService(); + ownerMapService = new OwnerMapService(petTypeService, petService); + } + + @DisplayName("Verify Zero Owners") + @Test + void ownersAreZero() { + int ownerCount = ownerMapService.findAll().size(); + + assertThat(ownerCount).isZero(); + } + + @DisplayName("Pet Type - ") + @Nested + class TestCreatePetTypes { + + @BeforeEach + void setUp() { + PetType petType = new PetType(1L, "Dog"); + PetType petType2 = new PetType(2L, "Cat"); + petTypeService.save(petType); + petTypeService.save(petType2); + } + + @DisplayName("Test Pet Count") + @Test + void testPetCount() { + int petTypeCount = petTypeService.findAll().size(); + + assertThat(petTypeCount).isNotZero().isEqualTo(2); + } + + @DisplayName("Save Owners Tests - ") + @Nested + class SaveOwnersTests { + + @BeforeEach + void setUp() { + ownerMapService.save(new Owner(1L, "Before", "Each")); + } + + @DisplayName("Save Owner") + @Test + void saveOwner() { + Owner owner = new Owner(2L, "Joe", "Buck"); + + Owner savedOwner = ownerMapService.save(owner); + + assertThat(savedOwner).isNotNull(); + } + + @DisplayName("Save Owners Tests - ") + @Nested + class FindOwnersTests { + + @DisplayName("Find Owner") + @Test + void findOwner() { + + Owner foundOwner = ownerMapService.findById(1L); + + assertThat(foundOwner).isNotNull(); + } + + @DisplayName("Find Owner Not Found") + @Test + void findOwnerNotFound() { + + Owner foundOwner = ownerMapService.findById(2L); + + assertThat(foundOwner).isNull(); + } + } + } + } + + @DisplayName("Verify Still Zero Owners") + @Test + void ownersAreStillZero() { + int ownerCount = ownerMapService.findAll().size(); + + assertThat(ownerCount).isZero(); + } +} \ No newline at end of file From 762592317a928f390b2a313abb32b6552ddb6183 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 11:02:13 -0400 Subject: [PATCH 15/30] adding test interfaces example --- .../springframework/sfgpetclinic/ControllerTests.java | 10 ++++++++++ .../guru/springframework/sfgpetclinic/ModelTests.java | 10 ++++++++++ .../sfgpetclinic/controllers/IndexControllerTest.java | 4 ++-- .../sfgpetclinic/controllers/VetControllerTest.java | 3 ++- .../springframework/sfgpetclinic/model/OwnerTest.java | 5 ++--- .../springframework/sfgpetclinic/model/PersonTest.java | 5 ++--- 6 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java create mode 100644 src/test/java/guru/springframework/sfgpetclinic/ModelTests.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java b/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java new file mode 100644 index 00000000..a09e2e2a --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java @@ -0,0 +1,10 @@ +package guru.springframework.sfgpetclinic; + +import org.junit.jupiter.api.Tag; + +/** + * Created by jt on 2018-10-28. + */ +@Tag("controllers") +public interface ControllerTests { +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java b/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java new file mode 100644 index 00000000..56b86b9d --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java @@ -0,0 +1,10 @@ +package guru.springframework.sfgpetclinic; + +import org.junit.jupiter.api.Tag; + +/** + * Created by jt on 2018-10-28. + */ +@Tag("model") +public interface ModelTests { +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index b86b8923..646d1063 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -1,5 +1,6 @@ package guru.springframework.sfgpetclinic.controllers; +import guru.springframework.sfgpetclinic.ControllerTests; import org.junit.jupiter.api.*; import org.junit.jupiter.api.condition.*; @@ -9,8 +10,7 @@ import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assumptions.assumeTrue; -@Tag("controllers") -class IndexControllerTest { +class IndexControllerTest implements ControllerTests { IndexController controller; diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java index 39906cff..5236e8d7 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java @@ -1,5 +1,6 @@ package guru.springframework.sfgpetclinic.controllers; +import guru.springframework.sfgpetclinic.ControllerTests; import guru.springframework.sfgpetclinic.fauxspring.Model; import guru.springframework.sfgpetclinic.fauxspring.ModelMapImpl; import guru.springframework.sfgpetclinic.model.Vet; @@ -15,7 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; -class VetControllerTest { +class VetControllerTest implements ControllerTests { VetService vetService; SpecialtyService specialtyService; diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index d18d1e14..b3d3f11a 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -1,14 +1,13 @@ package guru.springframework.sfgpetclinic.model; -import org.junit.jupiter.api.Tag; +import guru.springframework.sfgpetclinic.ModelTests; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.*; -@Tag("model") -class OwnerTest { +class OwnerTest implements ModelTests { @Test void dependentAssertions() { diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index c4d9f50a..c0e80c67 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -1,12 +1,11 @@ package guru.springframework.sfgpetclinic.model; -import org.junit.jupiter.api.Tag; +import guru.springframework.sfgpetclinic.ModelTests; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; -@Tag("model") -class PersonTest { +class PersonTest implements ModelTests { @Test void groupedAssertions() { From c4baa2cf03b0b8ca10c890f31768315049c720a2 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 11:02:50 -0400 Subject: [PATCH 16/30] cleaning up imports --- .../sfgpetclinic/controllers/IndexControllerTest.java | 5 ++++- .../sfgpetclinic/controllers/VetControllerTest.java | 1 - .../guru/springframework/sfgpetclinic/model/OwnerTest.java | 3 ++- .../guru/springframework/sfgpetclinic/model/PersonTest.java | 3 ++- .../sfgpetclinic/services/map/OwnerMapServiceTest.java | 1 - .../services/springdatajpa/OwnerSDJpaServiceTest.java | 2 -- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java index 646d1063..0756ce83 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/IndexControllerTest.java @@ -1,7 +1,10 @@ package guru.springframework.sfgpetclinic.controllers; import guru.springframework.sfgpetclinic.ControllerTests; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.*; import java.time.Duration; diff --git a/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java index 5236e8d7..7da11f0d 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/controllers/VetControllerTest.java @@ -14,7 +14,6 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; class VetControllerTest implements ControllerTests { diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index b3d3f11a..809515fb 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -5,7 +5,8 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertEquals; class OwnerTest implements ModelTests { diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index c0e80c67..a232c91f 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -3,7 +3,8 @@ import guru.springframework.sfgpetclinic.ModelTests; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertEquals; class PersonTest implements ModelTests { diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java b/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java index b6e2ea07..f9e99a4f 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/services/map/OwnerMapServiceTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; @DisplayName("Owner Map Service Test - ") class OwnerMapServiceTest { diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java index 63294f63..b7b26f9c 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/OwnerSDJpaServiceTest.java @@ -5,8 +5,6 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - @Disabled(value = "Disabled until we learn Mocking") class OwnerSDJpaServiceTest { From 6f6386c9a87bc75fb10c9689287d639bab472ed5 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 11:18:09 -0400 Subject: [PATCH 17/30] adding default method example --- .../springframework/sfgpetclinic/ControllerTests.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java b/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java index a09e2e2a..952afbb7 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java +++ b/src/test/java/guru/springframework/sfgpetclinic/ControllerTests.java @@ -1,10 +1,18 @@ package guru.springframework.sfgpetclinic; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestInstance; /** * Created by jt on 2018-10-28. */ +@TestInstance(TestInstance.Lifecycle.PER_CLASS) @Tag("controllers") public interface ControllerTests { + + @BeforeAll + default void beforeAll(){ + System.out.println("Lets do something here"); + } } From 8ed17a8c51ac15f45365b965878f55a21867ce86 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 11:34:39 -0400 Subject: [PATCH 18/30] adding repeated test example --- .../springframework/sfgpetclinic/model/PersonTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index a232c91f..7999180f 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -1,6 +1,8 @@ package guru.springframework.sfgpetclinic.model; import guru.springframework.sfgpetclinic.ModelTests; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertAll; @@ -29,4 +31,11 @@ void groupedAssertionMsgs() { () -> assertEquals(person.getFirstName(), "Joe", "First Name Failed"), () -> assertEquals(person.getLastName(), "Buck", "Last Name Failed")); } + + @RepeatedTest(value = 10, name = "{displayName} : {currentRepetition} - {totalRepetitions}") + @DisplayName("My Repeated Test") + @Test + void myRepeatedTest() { + //todo - impl + } } \ No newline at end of file From a77c59f25409708141be5e0d351527cb40416ccf Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 11:56:58 -0400 Subject: [PATCH 19/30] adding di example --- .../sfgpetclinic/model/PersonTest.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index 7999180f..266c644b 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -1,9 +1,7 @@ package guru.springframework.sfgpetclinic.model; import guru.springframework.sfgpetclinic.ModelTests; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.RepeatedTest; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -34,8 +32,13 @@ void groupedAssertionMsgs() { @RepeatedTest(value = 10, name = "{displayName} : {currentRepetition} - {totalRepetitions}") @DisplayName("My Repeated Test") - @Test void myRepeatedTest() { //todo - impl } + + @RepeatedTest(5) + void myRepeatedTestWithDI(TestInfo testInfo, RepetitionInfo repetitionInfo) { + System.out.println(testInfo.getDisplayName() + ": " + repetitionInfo.getCurrentRepetition()); + + } } \ No newline at end of file From 2671d2750729aae9ca65dab1e9dd8854fd4ace4f Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 12:26:11 -0400 Subject: [PATCH 20/30] completing assignment --- .../sfgpetclinic/ModelRepeatedTests.java | 19 ++++++++++++ .../sfgpetclinic/ModelTests.java | 7 +++++ .../model/PersonRepeatedTests.java | 31 +++++++++++++++++++ .../sfgpetclinic/model/PersonTest.java | 14 +-------- 4 files changed, 58 insertions(+), 13 deletions(-) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/ModelRepeatedTests.java create mode 100644 src/test/java/guru/springframework/sfgpetclinic/model/PersonRepeatedTests.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/ModelRepeatedTests.java b/src/test/java/guru/springframework/sfgpetclinic/ModelRepeatedTests.java new file mode 100644 index 00000000..615f7815 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/ModelRepeatedTests.java @@ -0,0 +1,19 @@ +package guru.springframework.sfgpetclinic; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.RepetitionInfo; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestInfo; + +/** + * Created by jt on 2018-10-28. + */ +@Tag("repeated") +public interface ModelRepeatedTests { + + @BeforeEach + default void beforeEachConsoleOutputer(TestInfo testInfo, RepetitionInfo repetitionInfo){ + System.out.println("Running Test - " + testInfo.getDisplayName() + " - " + + repetitionInfo.getCurrentRepetition() + " | " + repetitionInfo.getTotalRepetitions()); + } +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java b/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java index 56b86b9d..36279857 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java +++ b/src/test/java/guru/springframework/sfgpetclinic/ModelTests.java @@ -1,10 +1,17 @@ package guru.springframework.sfgpetclinic; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestInfo; /** * Created by jt on 2018-10-28. */ @Tag("model") public interface ModelTests { + + @BeforeEach + default void beforeEachConsoleOutputer(TestInfo testInfo){ + System.out.println("Running Test - " + testInfo.getDisplayName()); + } } diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonRepeatedTests.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonRepeatedTests.java new file mode 100644 index 00000000..d77a3fbc --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonRepeatedTests.java @@ -0,0 +1,31 @@ +package guru.springframework.sfgpetclinic.model; + +import guru.springframework.sfgpetclinic.ModelRepeatedTests; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.RepetitionInfo; +import org.junit.jupiter.api.TestInfo; + +/** + * Created by jt on 2018-10-28. + */ +public class PersonRepeatedTests implements ModelRepeatedTests { + + @RepeatedTest(value = 10, name = "{displayName} : {currentRepetition} - {totalRepetitions}") + @DisplayName("My Repeated Test") + void myRepeatedTest() { + //todo - impl + } + + @RepeatedTest(5) + void myRepeatedTestWithDI(TestInfo testInfo, RepetitionInfo repetitionInfo) { + System.out.println(testInfo.getDisplayName() + ": " + repetitionInfo.getCurrentRepetition()); + + } + + @RepeatedTest(value = 5, name = "{displayName} : {currentRepetition} | {totalRepetitions}") + @DisplayName("My Assignment Repeated Test") + void myAssignmentRepeated() { + //todo impl + } +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java index 266c644b..a232c91f 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/PersonTest.java @@ -1,7 +1,7 @@ package guru.springframework.sfgpetclinic.model; import guru.springframework.sfgpetclinic.ModelTests; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -29,16 +29,4 @@ void groupedAssertionMsgs() { () -> assertEquals(person.getFirstName(), "Joe", "First Name Failed"), () -> assertEquals(person.getLastName(), "Buck", "Last Name Failed")); } - - @RepeatedTest(value = 10, name = "{displayName} : {currentRepetition} - {totalRepetitions}") - @DisplayName("My Repeated Test") - void myRepeatedTest() { - //todo - impl - } - - @RepeatedTest(5) - void myRepeatedTestWithDI(TestInfo testInfo, RepetitionInfo repetitionInfo) { - System.out.println(testInfo.getDisplayName() + ": " + repetitionInfo.getCurrentRepetition()); - - } } \ No newline at end of file From d48c8ca907230df3eaac2539d33c3e7a9ebd1a54 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 13:06:35 -0400 Subject: [PATCH 21/30] param value source --- pom.xml | 5 +++++ .../springframework/sfgpetclinic/model/OwnerTest.java | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/pom.xml b/pom.xml index 802e51cd..cca65487 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,11 @@ ${junit-platform.version} test + + org.junit.jupiter + junit-jupiter-params + ${junit-platform.version} + org.junit.jupiter junit-jupiter-engine diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index 809515fb..3edbb704 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -2,6 +2,8 @@ import guru.springframework.sfgpetclinic.ModelTests; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -28,4 +30,10 @@ void dependentAssertions() { assertThat(owner.getCity(), is("Key West")); } + + @ParameterizedTest + @ValueSource(strings = {"Spring", "Framework", "Guru"}) + void testValueSource(String val) { + System.out.println(val); + } } \ No newline at end of file From 04e270b44511c52ce2aeb0ac0a9196f109e047db Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 13:19:21 -0400 Subject: [PATCH 22/30] adding displayname example --- .../guru/springframework/sfgpetclinic/model/OwnerTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index 3edbb704..6a6de0b5 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -1,6 +1,7 @@ package guru.springframework.sfgpetclinic.model; import guru.springframework.sfgpetclinic.ModelTests; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -31,7 +32,8 @@ void dependentAssertions() { assertThat(owner.getCity(), is("Key West")); } - @ParameterizedTest + @DisplayName("Value Source Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") @ValueSource(strings = {"Spring", "Framework", "Guru"}) void testValueSource(String val) { System.out.println(val); From b4cd0bd349c32c1078789d721d97e764d23555f0 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 13:32:33 -0400 Subject: [PATCH 23/30] adding enum example --- .../springframework/sfgpetclinic/model/OwnerType.java | 9 +++++++++ .../springframework/sfgpetclinic/model/OwnerTest.java | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 src/main/java/guru/springframework/sfgpetclinic/model/OwnerType.java diff --git a/src/main/java/guru/springframework/sfgpetclinic/model/OwnerType.java b/src/main/java/guru/springframework/sfgpetclinic/model/OwnerType.java new file mode 100644 index 00000000..778cefec --- /dev/null +++ b/src/main/java/guru/springframework/sfgpetclinic/model/OwnerType.java @@ -0,0 +1,9 @@ +package guru.springframework.sfgpetclinic.model; + +/** + * Created by jt on 2018-10-28. + */ +public enum OwnerType { + + INDIVIDUAL, COMPANY +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index 6a6de0b5..fbdd7510 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; import static org.hamcrest.MatcherAssert.assertThat; @@ -38,4 +39,11 @@ void dependentAssertions() { void testValueSource(String val) { System.out.println(val); } + + @DisplayName("Enum Source Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") + @EnumSource(OwnerType.class) + void enumTest(OwnerType ownerType) { + System.out.println(ownerType); + } } \ No newline at end of file From 1d00e35454c3055b94478ec66a532389823fe5f1 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 13:44:37 -0400 Subject: [PATCH 24/30] adding csv source example --- .../sfgpetclinic/model/OwnerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index fbdd7510..cfa0bd70 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; @@ -46,4 +47,15 @@ void testValueSource(String val) { void enumTest(OwnerType ownerType) { System.out.println(ownerType); } + + @DisplayName("CSV Input Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") + @CsvSource({ + "FL, 1, 1", + "OH, 2, 2", + "MI, 3, 1" + }) + void csvInputTest(String stateName, int val1, int val2) { + System.out.println(stateName + " = " + val1 + ":" + val2); + } } \ No newline at end of file From a2314065d5576e3db4308296b91a33397c0edde2 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 13:56:54 -0400 Subject: [PATCH 25/30] adding csvFile Example --- .../springframework/sfgpetclinic/model/OwnerTest.java | 8 ++++++++ src/test/resources/input.csv | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 src/test/resources/input.csv diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index cfa0bd70..009dbadc 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvFileSource; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; @@ -58,4 +59,11 @@ void enumTest(OwnerType ownerType) { void csvInputTest(String stateName, int val1, int val2) { System.out.println(stateName + " = " + val1 + ":" + val2); } + + @DisplayName("CSV From File Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") + @CsvFileSource(resources = "/input.csv", numLinesToSkip = 1) + void csvFromFileTest(String stateName, int val1, int val2) { + System.out.println(stateName + " = " + val1 + ":" + val2); + } } \ No newline at end of file diff --git a/src/test/resources/input.csv b/src/test/resources/input.csv new file mode 100644 index 00000000..2cb9d4ef --- /dev/null +++ b/src/test/resources/input.csv @@ -0,0 +1,4 @@ +state, val1, val2 +FL, 3, 3 +OH, 4, 5 +MI, 8, 3 \ No newline at end of file From 25243cab3358ebbbc9bc02dc84d2d6ecfd08a26d Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 14:08:14 -0400 Subject: [PATCH 26/30] adding method example --- .../sfgpetclinic/model/OwnerTest.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index 009dbadc..ff9afcef 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -4,10 +4,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvFileSource; -import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.EnumSource; -import org.junit.jupiter.params.provider.ValueSource; +import org.junit.jupiter.params.provider.*; + +import java.util.stream.Stream; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -66,4 +65,18 @@ void csvInputTest(String stateName, int val1, int val2) { void csvFromFileTest(String stateName, int val1, int val2) { System.out.println(stateName + " = " + val1 + ":" + val2); } + + @DisplayName("Method Provider Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") + @MethodSource("getargs") + void fromMethodTest(String stateName, int val1, int val2) { + System.out.println(stateName + " = " + val1 + ":" + val2); + } + + static Stream getargs() { + return Stream.of( + Arguments.of("FL", 5, 1), + Arguments.of("OH", 2, 8), + Arguments.of("MI", 3, 5)); + } } \ No newline at end of file From beecbd6b7da132a06120a197e3122a6c60332a14 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 14:14:53 -0400 Subject: [PATCH 27/30] adding custom provider --- .../sfgpetclinic/CustomArgsProvider.java | 20 +++++++++++++++++++ .../sfgpetclinic/model/OwnerTest.java | 9 +++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/CustomArgsProvider.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/CustomArgsProvider.java b/src/test/java/guru/springframework/sfgpetclinic/CustomArgsProvider.java new file mode 100644 index 00000000..89a5f2da --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/CustomArgsProvider.java @@ -0,0 +1,20 @@ +package guru.springframework.sfgpetclinic; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +import java.util.stream.Stream; + +/** + * Created by jt on 2018-10-28. + */ +public class CustomArgsProvider implements ArgumentsProvider { + @Override + public Stream provideArguments(ExtensionContext extensionContext) throws Exception { + return Stream.of( + Arguments.of("FL", 7, 10), + Arguments.of("OH", 11, 42), + Arguments.of("MI", 44, 77)); + } +} diff --git a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java index ff9afcef..91aa58d8 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java +++ b/src/test/java/guru/springframework/sfgpetclinic/model/OwnerTest.java @@ -1,5 +1,6 @@ package guru.springframework.sfgpetclinic.model; +import guru.springframework.sfgpetclinic.CustomArgsProvider; import guru.springframework.sfgpetclinic.ModelTests; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -79,4 +80,12 @@ static Stream getargs() { Arguments.of("OH", 2, 8), Arguments.of("MI", 3, 5)); } + + @DisplayName("Custom Provider Test") + @ParameterizedTest(name = "{displayName} - [{index}] {arguments}") + @ArgumentsSource(CustomArgsProvider.class) + void fromCustomProviderTest(String stateName, int val1, int val2) { + System.out.println(stateName + " = " + val1 + ":" + val2); + } + } \ No newline at end of file From c513f2d2972673f97abac05502574dfea58bba7e Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 14:29:52 -0400 Subject: [PATCH 28/30] added integration test example --- .../springdatajpa/PetTypeSDJpaServiceIT.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java new file mode 100644 index 00000000..80c6736a --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java @@ -0,0 +1,31 @@ +package guru.springframework.sfgpetclinic.services.springdatajpa; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class PetTypeSDJpaServiceIT { + + @BeforeEach + void setUp() { + } + + @Test + void findAll() { + } + + @Test + void findById() { + } + + @Test + void save() { + } + + @Test + void delete() { + } + + @Test + void deleteById() { + } +} \ No newline at end of file From 61bfddfa29be1cde1a2949dd5dc5705872a0bc88 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 14:41:26 -0400 Subject: [PATCH 29/30] adding extension example --- .../junitextensions/TimingExtension.java | 38 +++++++++++++++++++ .../springdatajpa/PetTypeSDJpaServiceIT.java | 3 ++ 2 files changed, 41 insertions(+) create mode 100644 src/test/java/guru/springframework/sfgpetclinic/junitextensions/TimingExtension.java diff --git a/src/test/java/guru/springframework/sfgpetclinic/junitextensions/TimingExtension.java b/src/test/java/guru/springframework/sfgpetclinic/junitextensions/TimingExtension.java new file mode 100644 index 00000000..477319d2 --- /dev/null +++ b/src/test/java/guru/springframework/sfgpetclinic/junitextensions/TimingExtension.java @@ -0,0 +1,38 @@ +package guru.springframework.sfgpetclinic.junitextensions; + +import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import java.lang.reflect.Method; +import java.util.logging.Logger; + +/** + * Original source - https://junit.org/junit5/docs/current/user-guide/#extensions-lifecycle-callbacks-timing-extension + * + * Created by jt on 2018-10-28. + */ +public class TimingExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback { + + private static final Logger logger = Logger.getLogger(TimingExtension.class.getName()); + + private static final String START_TIME = "start time"; + + @Override + public void beforeTestExecution(ExtensionContext context) throws Exception { + getStore(context).put(START_TIME, System.currentTimeMillis()); + } + + @Override + public void afterTestExecution(ExtensionContext context) throws Exception { + Method testMethod = context.getRequiredTestMethod(); + long startTime = getStore(context).remove(START_TIME, long.class); + long duration = System.currentTimeMillis() - startTime; + + logger.info(() -> String.format("Method [%s] took %s ms.", testMethod.getName(), duration)); + } + + private ExtensionContext.Store getStore(ExtensionContext context) { + return context.getStore(ExtensionContext.Namespace.create(getClass(), context.getRequiredTestMethod())); + } +} \ No newline at end of file diff --git a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java index 80c6736a..36237e6d 100644 --- a/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java +++ b/src/test/java/guru/springframework/sfgpetclinic/services/springdatajpa/PetTypeSDJpaServiceIT.java @@ -1,8 +1,11 @@ package guru.springframework.sfgpetclinic.services.springdatajpa; +import guru.springframework.sfgpetclinic.junitextensions.TimingExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +@ExtendWith(TimingExtension.class) class PetTypeSDJpaServiceIT { @BeforeEach From 3aae11781f73fac5d244d51e2efc2cbe156f19fe Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sun, 28 Oct 2018 15:11:37 -0400 Subject: [PATCH 30/30] adding failsafe config --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index cca65487..3d744697 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,14 @@ --illegal-access=permit + + + + integration-test + verify + + +