diff --git a/.idea/libraries/Gradle__org_projectlombok_lombok_1_16_20.xml b/.idea/libraries/Gradle__org_projectlombok_lombok_1_16_20.xml
deleted file mode 100644
index d5bf6fc..0000000
--- a/.idea/libraries/Gradle__org_projectlombok_lombok_1_16_20.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules/spring-boot-testing.iml b/.idea/modules/spring-boot-testing.iml
index d059007..0cb765f 100644
--- a/.idea/modules/spring-boot-testing.iml
+++ b/.idea/modules/spring-boot-testing.iml
@@ -1,5 +1,5 @@
-
+
diff --git a/spring-boot/spring-boot-testing/README.md b/spring-boot/spring-boot-testing/README.md
index 7d9c443..cc80f81 100644
--- a/spring-boot/spring-boot-testing/README.md
+++ b/spring-boot/spring-boot-testing/README.md
@@ -2,6 +2,7 @@
## Blog Posts
* [Structuring and Testing Modules and Layers with Spring Boot](https://reflectoring.io/testing-verticals-and-layers-spring-boot/)
-* [All You Need To Know About Unit Testing with Spring Boot](https://reflectoring.io/unit-testing-spring-boot/)
-* [All You Need To Know About Testing Web Controllers with Spring Boot](https://reflectoring.io/spring-boot-web-controller-test/)
-* [All You Need To Know About Testing JPA Queries with Spring Boot](https://reflectoring.io/spring-boot-data-jpa-test/)
+* [Unit Testing with Spring Boot](https://reflectoring.io/unit-testing-spring-boot/)
+* [Testing Spring MVC Web Controllers with @WebMvcTest](https://reflectoring.io/spring-boot-web-controller-test/)
+* [Testing JPA Queries with @DataJpaTest](https://reflectoring.io/spring-boot-data-jpa-test/)
+* [Integration Tests with @SpringBoot](https://reflectoring.io/spring-boot-test/)
diff --git a/spring-boot/spring-boot-testing/application-test.yml b/spring-boot/spring-boot-testing/application-test.yml
new file mode 100644
index 0000000..a48f767
--- /dev/null
+++ b/spring-boot/spring-boot-testing/application-test.yml
@@ -0,0 +1,5 @@
+spring.main.allow-bean-definition-overriding: true
+spring.jpa.hibernate.ddl-auto: create-drop
+spring.liquibase.enabled: false
+spring.flyway.enabled: false
+foo: bar
\ No newline at end of file
diff --git a/spring-boot/spring-boot-testing/application.yml b/spring-boot/spring-boot-testing/application.yml
new file mode 100644
index 0000000..440216a
--- /dev/null
+++ b/spring-boot/spring-boot-testing/application.yml
@@ -0,0 +1,5 @@
+spring.main.allow-bean-definition-overriding: true
+spring.jpa.hibernate.ddl-auto: create-drop
+spring.liquibase.enabled: false
+spring.flyway.enabled: false
+io.reflectoring.scheduling.enabled: false
\ No newline at end of file
diff --git a/spring-boot/spring-boot-testing/build.gradle b/spring-boot/spring-boot-testing/build.gradle
index e5f133b..4aae4fd 100644
--- a/spring-boot/spring-boot-testing/build.gradle
+++ b/spring-boot/spring-boot-testing/build.gradle
@@ -1,6 +1,6 @@
buildscript {
ext {
- springBootVersion = '2.0.2.RELEASE'
+ springBootVersion = '2.1.3.RELEASE'
}
repositories {
mavenCentral()
@@ -20,10 +20,10 @@ version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
+ jcenter()
mavenCentral()
}
-
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
@@ -34,6 +34,15 @@ dependencies {
compileOnly('org.projectlombok:lombok')
runtime('com.h2database:h2')
testCompile('org.springframework.boot:spring-boot-starter-test')
- testCompile 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
+ testCompile('org.junit.jupiter:junit-jupiter:5.4.0')
+ testCompile('org.junit.platform:junit-platform-launcher:1.4.0')
testCompile('org.mockito:mockito-junit-jupiter:2.23.0')
+ testCompile('de.adesso:junit-insights:1.0.0')
+ annotationProcessor 'org.projectlombok:lombok:1.18.6'
+}
+
+test {
+ systemProperty 'de.adesso.junitinsights.enabled', 'true'
+ systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
+ useJUnitPlatform()
}
diff --git a/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.jar b/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..1ce6e58
Binary files /dev/null and b/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.properties b/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9798a6e
--- /dev/null
+++ b/spring-boot/spring-boot-testing/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Feb 06 12:27:20 CET 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/SchedulingConfiguration.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/SchedulingConfiguration.java
new file mode 100644
index 0000000..eb1f21f
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/SchedulingConfiguration.java
@@ -0,0 +1,14 @@
+package io.reflectoring;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(
+ name = "io.reflectoring.scheduling.enabled",
+ havingValue = "true",
+ matchIfMissing = true)
+public class SchedulingConfiguration {
+}
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/RegisterUseCase.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/RegisterUseCase.java
index 7337099..ae88db4 100644
--- a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/RegisterUseCase.java
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/RegisterUseCase.java
@@ -11,8 +11,15 @@ public class RegisterUseCase {
private final SaveUserPort saveUserPort;
+ private final SendMailPort sendMailPort;
+
public Long registerUser(User user, boolean sendWelcomeMail) {
user.setRegistrationDate(LocalDateTime.now());
+
+ if(sendWelcomeMail){
+ sendMailPort.sendMail("Welcome!", "Thanks for registering.");
+ }
+
return saveUserPort.saveUser(user);
}
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/SendMailPort.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/SendMailPort.java
new file mode 100644
index 0000000..7e0af25
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/domain/SendMailPort.java
@@ -0,0 +1,7 @@
+package io.reflectoring.testing.domain;
+
+public interface SendMailPort {
+
+ void sendMail(String subject, String text);
+
+}
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/mail/MailingAdapter.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/mail/MailingAdapter.java
new file mode 100644
index 0000000..2f78886
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/mail/MailingAdapter.java
@@ -0,0 +1,14 @@
+package io.reflectoring.testing.mail;
+
+import io.reflectoring.testing.domain.SendMailPort;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MailingAdapter implements SendMailPort {
+
+ @Override
+ public void sendMail(String subject, String text) {
+ // sending a mail...
+ }
+
+}
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/PersistenceAdapter.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/PersistenceAdapter.java
index e568017..8361af7 100644
--- a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/PersistenceAdapter.java
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/PersistenceAdapter.java
@@ -6,11 +6,14 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@Component
-@RequiredArgsConstructor
public class PersistenceAdapter implements SaveUserPort {
private final UserRepository userRepository;
+ public PersistenceAdapter(UserRepository userRepository) {
+ this.userRepository = userRepository;
+ }
+
@Override
public Long saveUser(User user) {
UserEntity userEntity = new UserEntity(
@@ -19,4 +22,9 @@ public class PersistenceAdapter implements SaveUserPort {
UserEntity savedUserEntity = userRepository.save(userEntity);
return savedUserEntity.getId();
}
+
+ public User loadUser(Long id) {
+ UserEntity userEntity = userRepository.findById(id).get();
+ return new User(userEntity.getId(), userEntity.getName(), userEntity.getEmail(), userEntity.getRegistrationDate());
+ }
}
diff --git a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/UserRepository.java b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/UserRepository.java
index 2b1c652..b5a8f4e 100644
--- a/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/UserRepository.java
+++ b/spring-boot/spring-boot-testing/src/main/java/io/reflectoring/testing/persistence/UserRepository.java
@@ -5,7 +5,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
-interface UserRepository extends CrudRepository {
+public interface UserRepository extends CrudRepository {
UserEntity findByName(String name);
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/ApplicationTests.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/ApplicationTests.java
index 85bf493..ecb5f73 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/ApplicationTests.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/ApplicationTests.java
@@ -6,7 +6,11 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
-@SpringBootTest
+@SpringBootTest(properties = {
+ "spring.jpa.hibernate.ddl-auto=create-drop",
+ "spring.liquibase.enabled=false",
+ "spring.flyway.enabled=false"
+})
class ApplicationTests {
@Test
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingConfigurationTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingConfigurationTest.java
index ff89f18..4938e9d 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingConfigurationTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingConfigurationTest.java
@@ -10,7 +10,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = BookingConfiguration.class)
class BookingConfigurationTest {
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingIntegrationTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingIntegrationTest.java
index c5d6179..f25de1b 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingIntegrationTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/BookingIntegrationTest.java
@@ -14,7 +14,6 @@ import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-@ExtendWith(SpringExtension.class)
@SpringBootTest
class BookingIntegrationTest {
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/web/BookingControllerTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/web/BookingControllerTest.java
index ecb6a59..332713c 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/web/BookingControllerTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/booking/web/BookingControllerTest.java
@@ -21,7 +21,6 @@ import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = BookingController.class)
class BookingControllerTest {
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/CustomerConfigurationTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/CustomerConfigurationTest.java
index 92c2539..c1a14a8 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/CustomerConfigurationTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/CustomerConfigurationTest.java
@@ -5,7 +5,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = CustomerConfiguration.class)
class CustomerConfigurationTest {
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/data/CustomerRepositoryTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/data/CustomerRepositoryTest.java
index ec1e14e..15ef7bc 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/data/CustomerRepositoryTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/customer/data/CustomerRepositoryTest.java
@@ -12,7 +12,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.assertj.core.api.Assertions.assertThat;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
class CustomerRepositoryTest {
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/MockBeanTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/MockBeanTest.java
new file mode 100644
index 0000000..92db365
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/MockBeanTest.java
@@ -0,0 +1,47 @@
+package io.reflectoring.testing;
+
+import java.time.LocalDateTime;
+
+import io.reflectoring.testing.domain.RegisterUseCase;
+import io.reflectoring.testing.domain.User;
+import io.reflectoring.testing.persistence.PersistenceAdapter;
+import io.reflectoring.testing.persistence.UserEntity;
+import io.reflectoring.testing.persistence.UserRepository;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.TestPropertySource;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+@SpringBootTest
+class MockBeanTest {
+
+ @MockBean
+ private UserRepository userRepository;
+
+ @Autowired
+ private RegisterUseCase registerUseCase;
+
+ @Test
+ void testRegister(){
+ // given
+ User user = new User("Zaphod", "zaphod@galaxy.net");
+ boolean sendWelcomeMail = true;
+
+ // when
+ when(userRepository.save(any(UserEntity.class))).thenReturn(userEntity(1L));
+ Long userId = registerUseCase.registerUser(user, sendWelcomeMail);
+
+ // then
+ assertThat(userId).isEqualTo(1L);
+ }
+
+ private UserEntity userEntity(Long id){
+ return new UserEntity(id, "Zaphod", "zaphod@galaxy.net", LocalDateTime.now());
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseIntegrationTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseIntegrationTest.java
new file mode 100644
index 0000000..7f59f4c
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseIntegrationTest.java
@@ -0,0 +1,48 @@
+package io.reflectoring.testing;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.reflectoring.testing.persistence.PersistenceAdapter;
+import io.reflectoring.testing.persistence.UserEntity;
+import io.reflectoring.testing.persistence.UserRepository;
+import io.reflectoring.testing.web.UserResource;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.web.servlet.MockMvc;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@SpringBootTest(properties = {
+ "spring.jpa.hibernate.ddl-auto=create-drop",
+ "spring.liquibase.enabled=false",
+ "spring.flyway.enabled=false"
+})
+@AutoConfigureMockMvc
+public class RegisterUseCaseIntegrationTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Test
+ void registrationWorksThroughAllLayers() throws Exception {
+ UserResource user = new UserResource("Zaphod", "zaphod@galaxy.net");
+
+ mockMvc.perform(post("/forums/{forumId}/register", 42L)
+ .contentType("application/json")
+ .param("sendWelcomeMail", "true")
+ .content(objectMapper.writeValueAsString(user)))
+ .andExpect(status().isOk());
+
+ UserEntity userEntity = userRepository.findByName("Zaphod");
+ assertThat(userEntity.getEmail()).isEqualTo("zaphod@galaxy.net");
+ }
+
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseTest.java
index 05d20e8..d463a9e 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/RegisterUseCaseTest.java
@@ -2,6 +2,7 @@ package io.reflectoring.testing;
import io.reflectoring.testing.domain.RegisterUseCase;
import io.reflectoring.testing.domain.SaveUserPort;
+import io.reflectoring.testing.domain.SendMailPort;
import io.reflectoring.testing.domain.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -19,17 +20,20 @@ class RegisterUseCaseTest {
@Mock
private SaveUserPort saveUserPort;
+ @Mock
+ private SendMailPort sendMailPort;
+
private RegisterUseCase registerUseCase;
@BeforeEach
void initUseCase() {
- registerUseCase = new RegisterUseCase(saveUserPort);
+ registerUseCase = new RegisterUseCase(saveUserPort, sendMailPort);
}
@Test
void savedUserHasRegistrationDate() {
User user = new User("zaphod", "zaphod@mail.com");
- when(saveUserPort.saveUser(any(User.class))).then(returnsFirstArg());
+ when(saveUserPort.saveUser(any(User.class))).thenReturn(42L);
Long userId = registerUseCase.registerUser(user, false);
assertThat(userId).isNotNull();
}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SchedulingTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SchedulingTest.java
new file mode 100644
index 0000000..c20d55e
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SchedulingTest.java
@@ -0,0 +1,21 @@
+package io.reflectoring.testing;
+
+import io.reflectoring.SchedulingConfiguration;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import static org.assertj.core.api.Assertions.*;
+
+@SpringBootTest(properties = "io.reflectoring.scheduling.enabled=false")
+class SchedulingTest {
+
+ @Autowired(required = false)
+ private SchedulingConfiguration schedulingConfiguration;
+
+ @Test
+ void test() {
+ assertThat(schedulingConfiguration).isNull();
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootImportTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootImportTest.java
new file mode 100644
index 0000000..e6cc5cb
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootImportTest.java
@@ -0,0 +1,21 @@
+package io.reflectoring.testing;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import other.namespace.Foo;
+import static org.assertj.core.api.Assertions.*;
+
+@SpringBootTest
+@Import(other.namespace.Foo.class)
+class SpringBootImportTest {
+
+ @Autowired
+ Foo foo;
+
+ @Test
+ void test() {
+ assertThat(foo).isNotNull();
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootProfileTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootProfileTest.java
new file mode 100644
index 0000000..ce0bf25
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootProfileTest.java
@@ -0,0 +1,20 @@
+package io.reflectoring.testing;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import static org.assertj.core.api.Assertions.*;
+
+@SpringBootTest
+@ActiveProfiles("test")
+class SpringBootProfileTest {
+
+ @Value("${foo}")
+ String foo;
+
+ @Test
+ void test(){
+ assertThat(foo).isEqualTo("bar");
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertiesTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertiesTest.java
new file mode 100644
index 0000000..bb95d3c
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertiesTest.java
@@ -0,0 +1,18 @@
+package io.reflectoring.testing;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest(properties = "foo=bar")
+class SpringBootPropertiesTest {
+
+ @Value("${foo}")
+ String foo;
+
+ @Test
+ void test(){
+ assertThat(foo).isEqualTo("bar");
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertySourceTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertySourceTest.java
new file mode 100644
index 0000000..6d122e7
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/SpringBootPropertySourceTest.java
@@ -0,0 +1,20 @@
+package io.reflectoring.testing;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import static org.assertj.core.api.Assertions.*;
+
+@SpringBootTest
+@TestPropertySource(locations = "/foo.properties")
+class SpringBootPropertySourceTest {
+
+ @Value("${foo}")
+ String foo;
+
+ @Test
+ void test(){
+ assertThat(foo).isEqualTo("bar");
+ }
+}
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/FlywayTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/FlywayTest.java
index bedacde..ef0b1d5 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/FlywayTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/FlywayTest.java
@@ -7,7 +7,6 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=validate",
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/HibernateTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/HibernateTest.java
index b1ffd07..a51c66b 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/HibernateTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/HibernateTest.java
@@ -12,7 +12,6 @@ import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.assertj.core.api.Assertions.*;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=create-drop",
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/LiquibaseTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/LiquibaseTest.java
index 1958ded..e8e5071 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/LiquibaseTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/LiquibaseTest.java
@@ -6,7 +6,6 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=validate",
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SpringDbUnitTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SpringDbUnitTest.java
index 1fab9f9..83e1dd1 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SpringDbUnitTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SpringDbUnitTest.java
@@ -15,7 +15,6 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import static org.assertj.core.api.Java6Assertions.*;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=create-drop",
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SqlTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SqlTest.java
index 8e17c71..834e5d4 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SqlTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/persistence/SqlTest.java
@@ -9,7 +9,6 @@ import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.assertj.core.api.Java6Assertions.*;
-@ExtendWith(SpringExtension.class)
@DataJpaTest
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=create-drop",
diff --git a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/web/RegisterRestControllerTest.java b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/web/RegisterRestControllerTest.java
index 1b2cef3..f7006ca 100644
--- a/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/web/RegisterRestControllerTest.java
+++ b/spring-boot/spring-boot-testing/src/test/java/io/reflectoring/testing/web/RegisterRestControllerTest.java
@@ -18,7 +18,6 @@ import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = RegisterRestController.class)
class RegisterRestControllerTest {
@@ -37,6 +36,8 @@ class RegisterRestControllerTest {
UserResource user = new UserResource("Zaphod", "zaphod@galaxy.net");
mockMvc.perform(post("/forums/42/register")
+ .param("sendWelcomeMail", "true")
+ .content(objectMapper.writeValueAsString(user))
.contentType("application/json"))
.andExpect(status().isOk());
diff --git a/spring-boot/spring-boot-testing/src/test/java/other/namespace/Foo.java b/spring-boot/spring-boot-testing/src/test/java/other/namespace/Foo.java
new file mode 100644
index 0000000..b21f131
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/java/other/namespace/Foo.java
@@ -0,0 +1,7 @@
+package other.namespace;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Foo {
+}
diff --git a/spring-boot/spring-boot-testing/src/test/resources/foo.properties b/spring-boot/spring-boot-testing/src/test/resources/foo.properties
new file mode 100644
index 0000000..c9f0304
--- /dev/null
+++ b/spring-boot/spring-boot-testing/src/test/resources/foo.properties
@@ -0,0 +1 @@
+foo=bar
\ No newline at end of file