From ead318ce8dfc85e2d135f0ad62536deb3e47a806 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 28 Apr 2021 15:37:28 +0200 Subject: [PATCH] Migrate MongoDB to JUnit 5 (except for ClassRule). See #583. --- README.md | 14 +++-- .../OrderRepositoryIntegrationTests.java | 22 +++---- .../SpringBooksIntegrationTests.java | 35 +++++------ .../advanced/AdvancedIntegrationTests.java | 22 +++---- .../advanced/ServersideScriptTests.java | 25 ++++---- .../CustomerRepositoryIntegrationTest.java | 48 +++++++------- .../ImmutableEntityIntegrationTest.java | 22 +++---- .../CustomerRepositoryIntegrationTest.java | 62 +++++++++--------- .../mongodb/fluent/FluentMongoApiTests.java | 38 +++++------ .../mongodb/geojson/StoreRepositoryTests.java | 18 +++--- .../mongodb/gridfs/GridFsTests.java | 27 ++++---- .../mongodb/ApplicationIntegrationTests.java | 4 +- .../mongodb/people/FlowAndCoroutinesTests.kt | 28 ++++----- .../mongodb/people/MongoDslTests.kt | 10 +-- .../mongodb/people/RepositoryTests.kt | 13 ++-- .../mongodb/people/TemplateTests.kt | 13 ++-- .../ContactRepositoryIntegrationTests.java | 44 ++++++------- .../MongoOperationsIntegrationTests.java | 47 +++++++------- .../UserRepositoryIntegrationTests.java | 36 +++++------ .../imperative/CustomerRepositoryTests.java | 21 +++---- .../ReactiveCustomerRepositoryTests.java | 21 +++---- .../ReactiveMongoTemplateIntegrationTest.java | 27 ++++---- ...activePersonRepositoryIntegrationTest.java | 63 +++++++++---------- ...xJava2PersonRepositoryIntegrationTest.java | 36 +++++------ ...tion.java => DocumentValidationTests.java} | 24 ++++--- ...SchemaQuery.java => SchemaQueryTests.java} | 22 +++---- .../PersonRepositoryIntegrationTest.java | 30 ++++----- .../textsearch/TextSearchRepositoryTests.java | 20 +++--- .../textsearch/TextSearchTemplateTests.java | 29 ++------- 29 files changed, 366 insertions(+), 455 deletions(-) rename mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/{DocumentValidation.java => DocumentValidationTests.java} (89%) rename mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/{SchemaQuery.java => SchemaQueryTests.java} (85%) diff --git a/README.md b/README.md index 6bd416c7..679dd778 100644 --- a/README.md +++ b/README.md @@ -105,11 +105,17 @@ We have separate folders for the samples of individual modules: ## Miscellaneous -* `bom` - Example project how to use the Spring Data release train bom in non-Spring-Boot scenarios. +* `bom` - Example project how to use the Spring Data release train bom in non-Spring-Boot + scenarios. * `map` - Example project to show how to use `Map`-backed repositories. -* `multi-store` - Example project to use both Spring Data MongoDB and Spring Data JPA in one project. +* `multi-store` - Example project to use both Spring Data MongoDB and Spring Data JPA in + one project. ## Note -* The example projects make use of the [Lombok](https://projectlombok.org/) plugin. To get proper code navigation in your IDE, you must install it separately. -Lombok is available in the IntelliJ plugins repository and as a [download](https://projectlombok.org/download) for Eclipse-based IDEs. +* The example projects make use of the [Lombok](https://projectlombok.org/) plugin. To get + proper code navigation in your IDE, you must install it separately. Lombok is available + in the IntelliJ plugins repository and as + a [download](https://projectlombok.org/download) for Eclipse-based IDEs. + +You need Java 16 or newer to run and compile the examples. diff --git a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/OrderRepositoryIntegrationTests.java b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/OrderRepositoryIntegrationTests.java index 2c549b67..a0ddac07 100644 --- a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/OrderRepositoryIntegrationTests.java +++ b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/OrderRepositoryIntegrationTests.java @@ -20,13 +20,12 @@ import static org.assertj.core.data.Offset.offset; import java.util.Date; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Sort; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration tests for {@link OrderRepository}. @@ -36,9 +35,8 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Christoph Strobl * @author Divya Srivastava */ -@RunWith(SpringRunner.class) @SpringBootTest -public class OrderRepositoryIntegrationTests { +class OrderRepositoryIntegrationTests { @Autowired OrderRepository repository; @@ -46,13 +44,13 @@ public class OrderRepositoryIntegrationTests { private final static LineItem product2 = new LineItem("p2", 0.87, 2); private final static LineItem product3 = new LineItem("p3", 5.33); - @Before - public void setup() { + @BeforeEach + void setup() { repository.deleteAll(); } @Test - public void createsInvoiceViaProgrammaticAggregation() { + void createsInvoiceViaProgrammaticAggregation() { var order = new Order("c42", new Date()).// addItem(product1).addItem(product2).addItem(product3); @@ -68,7 +66,7 @@ public class OrderRepositoryIntegrationTests { } @Test - public void createsInvoiceViaDeclarativeAggregation() { + void createsInvoiceViaDeclarativeAggregation() { var order = new Order("c42", new Date()).// addItem(product1).addItem(product2).addItem(product3); @@ -84,7 +82,7 @@ public class OrderRepositoryIntegrationTests { } @Test - public void declarativeAggregationWithSort() { + void declarativeAggregationWithSort() { repository.save(new Order("c42", new Date()).addItem(product1)); repository.save(new Order("c42", new Date()).addItem(product2)); @@ -100,7 +98,7 @@ public class OrderRepositoryIntegrationTests { } @Test - public void multiStageDeclarativeAggregation() { + void multiStageDeclarativeAggregation() { repository.save(new Order("c42", new Date()).addItem(product1)); repository.save(new Order("c42", new Date()).addItem(product2)); diff --git a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java index dcaf841a..0e77fb31 100644 --- a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java +++ b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java @@ -23,9 +23,8 @@ import java.util.List; import org.assertj.core.util.Files; import org.bson.Document; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -38,7 +37,6 @@ import org.springframework.data.mongodb.core.aggregation.ArrayOperators; import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.Granularities; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; -import org.springframework.test.context.junit4.SpringRunner; /** * Examples for Spring Books using the MongoDB Aggregation Framework. Data originates from Google's Book search. @@ -49,15 +47,14 @@ import org.springframework.test.context.junit4.SpringRunner; * "https://www.googleapis.com/books/v1/volumes?q=intitle:spring+framework">https://www.googleapis.com/books/v1/volumes?q=intitle:spring+framework * @see ) uniqueMappedResult.get("authors")).hasSize(8); } - record BooksPerPublisher(String publisher, int count, List titles) { + private record BooksPerPublisher(String publisher, int count, List titles) { } - record BookAndAuthors(String title, List authors) { + private record BookAndAuthors(String title, List authors) { } - record BookFacetPerPage(BookFacetPerPageId id, int count, List titles) { + private record BookFacetPerPage(BookFacetPerPageId id, int count, List titles) { } - record BookFacetPerPageId(int min, int max) { + private record BookFacetPerPageId(int min, int max) { } } diff --git a/mongodb/example/src/test/java/example/springdata/mongodb/advanced/AdvancedIntegrationTests.java b/mongodb/example/src/test/java/example/springdata/mongodb/advanced/AdvancedIntegrationTests.java index adf73788..1778da61 100644 --- a/mongodb/example/src/test/java/example/springdata/mongodb/advanced/AdvancedIntegrationTests.java +++ b/mongodb/example/src/test/java/example/springdata/mongodb/advanced/AdvancedIntegrationTests.java @@ -20,34 +20,32 @@ import static org.assertj.core.api.Assertions.*; import example.springdata.mongodb.customer.Customer; import org.bson.Document; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Meta; -import org.springframework.test.context.junit4.SpringRunner; import com.mongodb.BasicDBObject; -import com.mongodb.client.FindIterable; /** * @author Christoph Strobl * @author Oliver Gierke */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class AdvancedIntegrationTests { +@DataMongoTest +class AdvancedIntegrationTests { @Autowired AdvancedRepository repository; @Autowired MongoOperations operations; - Customer dave, oliver, carter; + private Customer dave, oliver, carter; - @Before - public void setUp() { + @BeforeEach + void setUp() { repository.deleteAll(); @@ -63,7 +61,7 @@ public class AdvancedIntegrationTests { * NOTE: Requires MongoDB v. 2.6.4+ */ @Test - public void findByFirstnameUsingMetaAttributes() { + void findByFirstnameUsingMetaAttributes() { // execute derived finder method just to get the comment in the profile log repository.findByFirstname(dave.getFirstname()); diff --git a/mongodb/example/src/test/java/example/springdata/mongodb/advanced/ServersideScriptTests.java b/mongodb/example/src/test/java/example/springdata/mongodb/advanced/ServersideScriptTests.java index cdbd8e14..104999f9 100644 --- a/mongodb/example/src/test/java/example/springdata/mongodb/advanced/ServersideScriptTests.java +++ b/mongodb/example/src/test/java/example/springdata/mongodb/advanced/ServersideScriptTests.java @@ -22,30 +22,29 @@ import example.springdata.mongodb.customer.Customer; import java.util.Map; import org.bson.Document; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.script.ExecutableMongoScript; import org.springframework.data.mongodb.core.script.NamedMongoScript; -import org.springframework.test.context.junit4.SpringRunner; /** * @author Christoph Strobl * @author Oliver Gierke */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class ServersideScriptTests { +@DataMongoTest +class ServersideScriptTests { @Autowired AdvancedRepository repository; @Autowired MongoOperations operations; - @Before - public void setUp() { + @BeforeEach + void setUp() { if (!operations.collectionExists(Customer.class)) { operations.createCollection(Customer.class); @@ -60,7 +59,7 @@ public class ServersideScriptTests { * Store and call an arbitrary JavaScript function (in this case a simple echo script) via its name. */ @Test - public void saveAndCallScriptViaName() { + void saveAndCallScriptViaName() { operations.scriptOps() .register(new NamedMongoScript("echoScript", new ExecutableMongoScript("function(x) { return x; }"))); @@ -73,8 +72,8 @@ public class ServersideScriptTests { * {@link Map#putIfAbsent(Object, Object)} */ @Test - @Ignore - public void complexScriptExecutionSimulatingPutIfAbsent() { + @Disabled + void complexScriptExecutionSimulatingPutIfAbsent() { var ned = new Customer("Ned", "Stark"); ned.setId("ned-stark"); diff --git a/mongodb/example/src/test/java/example/springdata/mongodb/customer/CustomerRepositoryIntegrationTest.java b/mongodb/example/src/test/java/example/springdata/mongodb/customer/CustomerRepositoryIntegrationTest.java index 2222b084..c0f04b63 100644 --- a/mongodb/example/src/test/java/example/springdata/mongodb/customer/CustomerRepositoryIntegrationTest.java +++ b/mongodb/example/src/test/java/example/springdata/mongodb/customer/CustomerRepositoryIntegrationTest.java @@ -15,42 +15,38 @@ */ package example.springdata.mongodb.customer; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.data.Offset.offset; -import java.util.List; import java.util.stream.Stream; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.data.geo.Distance; -import org.springframework.data.geo.GeoResults; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.index.GeospatialIndex; import org.springframework.data.querydsl.QSort; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration test for {@link CustomerRepository}. * * @author Oliver Gierke */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class CustomerRepositoryIntegrationTest { +@DataMongoTest +class CustomerRepositoryIntegrationTest { @Autowired CustomerRepository repository; @Autowired MongoOperations operations; - Customer dave, oliver, carter; + private Customer dave, oliver, carter; - @Before - public void setUp() { + @BeforeEach + void setUp() { repository.deleteAll(); @@ -63,31 +59,31 @@ public class CustomerRepositoryIntegrationTest { * Test case to show that automatically generated ids are assigned to the domain objects. */ @Test - public void setsIdOnSave() { + void setsIdOnSave() { var dave = repository.save(new Customer("Dave", "Matthews")); - assertThat(dave.getId(), is(notNullValue())); + assertThat(dave.getId()).isNotNull(); } /** * Test case to show the usage of the Querydsl-specific {@link QSort} to define the sort order in a type-safe way. */ @Test - public void findCustomersUsingQuerydslSort() { + void findCustomersUsingQuerydslSort() { var customer = QCustomer.customer; var result = repository.findByLastname("Matthews", new QSort(customer.firstname.asc())); - assertThat(result, hasSize(2)); - assertThat(result.get(0), is(dave)); - assertThat(result.get(1), is(oliver)); + assertThat(result).hasSize(2); + assertThat(result.get(0)).isEqualTo(dave); + assertThat(result.get(1)).isEqualTo(oliver); } /** * Test case to show the usage of Java {@link Stream}. */ @Test - public void findCustomersAsStream() { + void findCustomersAsStream() { try (var result = repository.findAllByCustomQueryWithStream()) { result.forEach(System.out::println); @@ -98,7 +94,7 @@ public class CustomerRepositoryIntegrationTest { * Test case to show the usage of the geo-spatial APIs to lookup people within a given distance of a reference point. */ @Test - public void exposesGeoSpatialFunctionality() { + void exposesGeoSpatialFunctionality() { var indexDefinition = new GeospatialIndex("address.location"); indexDefinition.getIndexOptions().put("min", -180); @@ -115,10 +111,10 @@ public class CustomerRepositoryIntegrationTest { var result = repository.findByAddressLocationNear(referenceLocation, oneKilometer); - assertThat(result.getContent(), hasSize(1)); + assertThat(result.getContent()).hasSize(1); var distanceToFirstStore = result.getContent().get(0).getDistance(); - assertThat(distanceToFirstStore.getMetric(), is(Metrics.KILOMETERS)); - assertThat(distanceToFirstStore.getValue(), closeTo(0.862, 0.001)); + assertThat(distanceToFirstStore.getMetric()).isEqualTo(Metrics.KILOMETERS); + assertThat(distanceToFirstStore.getValue()).isCloseTo(0.862, offset(0.001)); } } diff --git a/mongodb/example/src/test/java/example/springdata/mongodb/immutable/ImmutableEntityIntegrationTest.java b/mongodb/example/src/test/java/example/springdata/mongodb/immutable/ImmutableEntityIntegrationTest.java index a82d4d82..163ad62c 100644 --- a/mongodb/example/src/test/java/example/springdata/mongodb/immutable/ImmutableEntityIntegrationTest.java +++ b/mongodb/example/src/test/java/example/springdata/mongodb/immutable/ImmutableEntityIntegrationTest.java @@ -17,14 +17,13 @@ package example.springdata.mongodb.immutable; import static org.assertj.core.api.Assertions.*; -import org.bson.types.ObjectId; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration test for {@link ImmutablePerson} showing features around immutable object support. @@ -32,14 +31,13 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Mark Paluch * @author Christoph Strobl */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class ImmutableEntityIntegrationTest { +@DataMongoTest +class ImmutableEntityIntegrationTest { @Autowired MongoOperations operations; - @Before - public void setUp() { + @BeforeEach + void setUp() { operations.dropCollection(ImmutablePerson.class); } @@ -48,7 +46,7 @@ public class ImmutableEntityIntegrationTest { * {@link ImmutablePerson#getRandomNumber()} gets set via {@link ApplicationConfiguration#beforeConvertCallback()}. */ @Test - public void setsRandomNumberOnSave() { + void setsRandomNumberOnSave() { var unsaved = new ImmutablePerson(); assertThat(unsaved.getRandomNumber()).isZero(); @@ -64,7 +62,7 @@ public class ImmutableEntityIntegrationTest { * {@link ImmutableRecord#getRandomNumber()} gets set via {@link ApplicationConfiguration#beforeConvertCallback()}. */ @Test - public void setsRandomNumberOnSaveRecord() { + void setsRandomNumberOnSaveRecord() { var unsaved = new ImmutableRecord(null, 0); assertThat(unsaved.randomNumber()).isZero(); diff --git a/mongodb/example/src/test/java/example/springdata/mongodb/projections/CustomerRepositoryIntegrationTest.java b/mongodb/example/src/test/java/example/springdata/mongodb/projections/CustomerRepositoryIntegrationTest.java index e6f5b4fb..e0fb3765 100644 --- a/mongodb/example/src/test/java/example/springdata/mongodb/projections/CustomerRepositoryIntegrationTest.java +++ b/mongodb/example/src/test/java/example/springdata/mongodb/projections/CustomerRepositoryIntegrationTest.java @@ -15,33 +15,27 @@ */ package example.springdata.mongodb.projections; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; -import java.util.Collection; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.context.annotation.Configuration; -import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.projection.TargetAware; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * Integration tests for {@link CustomerRepository} to show projection capabilities. * * @author Oliver Gierke */ -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest -public class CustomerRepositoryIntegrationTest { +@DataMongoTest +class CustomerRepositoryIntegrationTest { @Configuration @EnableAutoConfiguration @@ -49,10 +43,10 @@ public class CustomerRepositoryIntegrationTest { @Autowired CustomerRepository customers; - Customer dave, carter; + private Customer dave, carter; - @Before - public void setUp() { + @BeforeEach + void setUp() { customers.deleteAll(); @@ -61,60 +55,60 @@ public class CustomerRepositoryIntegrationTest { } @Test - public void projectsEntityIntoInterface() { + void projectsEntityIntoInterface() { var result = customers.findAllProjectedBy(); - assertThat(result, hasSize(2)); - assertThat(result.iterator().next().getFirstname(), is("Dave")); + assertThat(result).hasSize(2); + assertThat(result.iterator().next().getFirstname()).isEqualTo("Dave"); } @Test - public void projectsToDto() { + void projectsToDto() { var result = customers.findAllDtoedBy(); - assertThat(result, hasSize(2)); - assertThat(result.iterator().next().firstname(), is("Dave")); + assertThat(result).hasSize(2); + assertThat(result.iterator().next().firstname()).isEqualTo("Dave"); } @Test - public void projectsDynamically() { + void projectsDynamically() { var result = customers.findByFirstname("Dave", CustomerProjection.class); - assertThat(result, hasSize(1)); - assertThat(result.iterator().next().getFirstname(), is("Dave")); + assertThat(result).hasSize(1); + assertThat(result.iterator().next().getFirstname()).isEqualTo("Dave"); } @Test - public void projectsIndividualDynamically() { + void projectsIndividualDynamically() { var result = customers.findProjectedById(dave.getId(), CustomerSummary.class); - assertThat(result, is(notNullValue())); - assertThat(result.getFullName(), is("Dave Matthews")); + assertThat(result).isNotNull(); + assertThat(result.getFullName()).isEqualTo("Dave Matthews"); // Proxy backed by original instance as the projection uses dynamic elements - assertThat(((TargetAware) result).getTarget(), is(instanceOf(Customer.class))); + assertThat(((TargetAware) result).getTarget()).isInstanceOf(Customer.class); } @Test - public void projectIndividualInstance() { + void projectIndividualInstance() { var result = customers.findProjectedById(dave.getId()); - assertThat(result, is(notNullValue())); - assertThat(result.getFirstname(), is("Dave")); - assertThat(((TargetAware) result).getTarget(), is(instanceOf(Customer.class))); + assertThat(result).isNotNull(); + assertThat(result.getFirstname()).isEqualTo("Dave"); + assertThat(((TargetAware) result).getTarget()).isInstanceOf(Customer.class); } @Test - public void supportsProjectionInCombinationWithPagination() { + void supportsProjectionInCombinationWithPagination() { var page = customers .findPagedProjectedBy(PageRequest.of(0, 1, Sort.by(Direction.ASC, "lastname"))); - assertThat(page.getContent().get(0).getFirstname(), is("Carter")); + assertThat(page.getContent().get(0).getFirstname()).isEqualTo("Carter"); } } diff --git a/mongodb/fluent-api/src/test/java/example/springdata/mongodb/fluent/FluentMongoApiTests.java b/mongodb/fluent-api/src/test/java/example/springdata/mongodb/fluent/FluentMongoApiTests.java index e4044894..709e4dc3 100644 --- a/mongodb/fluent-api/src/test/java/example/springdata/mongodb/fluent/FluentMongoApiTests.java +++ b/mongodb/fluent-api/src/test/java/example/springdata/mongodb/fluent/FluentMongoApiTests.java @@ -23,11 +23,11 @@ import static org.springframework.data.mongodb.core.query.Update.*; import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.data.geo.Distance; import org.springframework.data.geo.GeoResults; @@ -35,9 +35,6 @@ import org.springframework.data.mongodb.core.ExecutableFindOperation.Terminating import org.springframework.data.mongodb.core.FluentMongoOperations; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.NearQuery; -import org.springframework.test.context.junit4.SpringRunner; - -import com.mongodb.client.result.UpdateResult; /** * Some tests showing usage and capabilities of {@link FluentMongoOperations}.
@@ -53,22 +50,21 @@ import com.mongodb.client.result.UpdateResult; * * @author Christoph Strobl */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class FluentMongoApiTests { +@DataMongoTest +class FluentMongoApiTests { @Autowired FluentMongoOperations mongoOps; /** * A predefined, reusable lookup method. */ - TerminatingFind findLuke; + private TerminatingFind findLuke; - final NearQuery alderaanWithin3Parsecs = NearQuery.near(-73.9667, 40.78).maxDistance(new Distance(3, MILES)) + private final NearQuery alderaanWithin3Parsecs = NearQuery.near(-73.9667, 40.78).maxDistance(new Distance(3, MILES)) .spherical(true); - @Before - public void setUp() { + @BeforeEach + void setUp() { findLuke = mongoOps.query(SWCharacter.class) // SWCharacter does only define the collection, id and name .as(Jedi.class) // so we use Jedi as the desired return type to also map "lastname" @@ -91,7 +87,7 @@ public class FluentMongoApiTests { * */ @Test - public void usePredefinedFinder() { + void usePredefinedFinder() { assertThat(findLuke.one()).contains(new Jedi("luke", "skywalker")); } @@ -109,7 +105,7 @@ public class FluentMongoApiTests { * */ @Test - public void fetchInterfaceProjection() { + void fetchInterfaceProjection() { var anakin = mongoOps.query(SWCharacter.class) // SWCharacter does only define the collection, id and name .as(Sith.class) // use an interface as return type to create a projection @@ -146,7 +142,7 @@ public class FluentMongoApiTests { * */ @Test - public void queryFirstVsOne() { + void queryFirstVsOne() { mongoOps.query(SWCharacter.class) // SWCharacter does only define the collection, id and name .matching(query(where("lastname").is("skywalker"))) // so properties are taken as is @@ -177,7 +173,7 @@ public class FluentMongoApiTests { * */ @Test - public void geoNearQuery() { + void geoNearQuery() { var results = mongoOps.query(SWCharacter.class) // SWCharacter defines collection, id and name .as(Jedi.class) // but we want to map the results to Jedi @@ -202,7 +198,7 @@ public class FluentMongoApiTests { * */ @Test - public void querySpecificCollection() { + void querySpecificCollection() { var skywalkers = mongoOps.query(Human.class) // Human does not define a collection via @Document .inCollection("star-wars") // so we set an explicit collection name @@ -216,7 +212,7 @@ public class FluentMongoApiTests { * Simple insert operation adding a new {@link Jedi} to the {@literal star-wars} collection. */ @Test - public void justInsertOne() { + void justInsertOne() { var chewbacca = new SWCharacter("Chewbacca"); @@ -239,7 +235,7 @@ public class FluentMongoApiTests { * */ @Test - public void updateAndUpsert() { + void updateAndUpsert() { var result = mongoOps.update(Jedi.class) // Jedi defines the collection and field mapping .matching(query(where("lastname").is("windu"))) // so "last" maps to "lastname". diff --git a/mongodb/geo-json/src/test/java/example/springdata/mongodb/geojson/StoreRepositoryTests.java b/mongodb/geo-json/src/test/java/example/springdata/mongodb/geojson/StoreRepositoryTests.java index 09363d4b..1f454ce1 100644 --- a/mongodb/geo-json/src/test/java/example/springdata/mongodb/geojson/StoreRepositoryTests.java +++ b/mongodb/geo-json/src/test/java/example/springdata/mongodb/geojson/StoreRepositoryTests.java @@ -16,10 +16,10 @@ package example.springdata.mongodb.geojson; import org.bson.Document; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.data.geo.Point; import org.springframework.data.geo.Polygon; import org.springframework.data.mongodb.core.MongoOperations; @@ -28,7 +28,6 @@ import org.springframework.data.mongodb.core.geo.GeoJson; import org.springframework.data.mongodb.core.geo.GeoJsonPolygon; import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Criteria; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration tests for {@link StoreRepository}. @@ -36,9 +35,8 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Christoph Strobl * @author Oliver Gierke */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class StoreRepositoryTests { +@DataMongoTest +class StoreRepositoryTests { private static final GeoJsonPolygon GEO_JSON_POLYGON = new GeoJsonPolygon(new Point(-73.992514, 40.758934), new Point(-73.961138, 40.760348), new Point(-73.991658, 40.730006), new Point(-73.992514, 40.758934)); @@ -81,7 +79,7 @@ public class StoreRepositoryTests { *
 	 */
 	@Test
-	public void findWithinGeoJsonPolygon() {
+	void findWithinGeoJsonPolygon() {
 		repository.findByLocationWithin(GEO_JSON_POLYGON).forEach(System.out::println);
 	}
 
@@ -102,7 +100,7 @@ public class StoreRepositoryTests {
 	 * 
 	 */
 	@Test
-	public void findWithinLegacyPolygon() {
+	void findWithinLegacyPolygon() {
 		repository.findByLocationWithin(new Polygon(new Point(-73.992514, 40.758934), new Point(-73.961138, 40.760348),
 				new Point(-73.991658, 40.730006))).forEach(System.out::println);
 	}
@@ -112,7 +110,7 @@ public class StoreRepositoryTests {
 	 * creation of the query using the registered {@link MongoConverter} for {@link GeoJson} conversion.
 	 */
 	@Test
-	public void findStoresThatIntersectGivenPolygon() {
+	void findStoresThatIntersectGivenPolygon() {
 
 		var geoJsonDbo = new Document();
 
diff --git a/mongodb/gridfs/src/test/java/example/springdata/mongodb/gridfs/GridFsTests.java b/mongodb/gridfs/src/test/java/example/springdata/mongodb/gridfs/GridFsTests.java
index 01f29913..aeca5f94 100644
--- a/mongodb/gridfs/src/test/java/example/springdata/mongodb/gridfs/GridFsTests.java
+++ b/mongodb/gridfs/src/test/java/example/springdata/mongodb/gridfs/GridFsTests.java
@@ -24,39 +24,34 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.gridfs.GridFsOperations;
-import org.springframework.data.mongodb.gridfs.GridFsResource;
-import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.util.StreamUtils;
 
-import com.mongodb.client.gridfs.model.GridFSFile;
-
 /**
  * Tests to show the usage of {@link GridFsOperations} with Spring Data MongoDB.
  *
  * @author Hartmut Lang
  * @author Mark Paluch
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class GridFsTests {
+@DataMongoTest
+class GridFsTests {
 
 	@Autowired GridFsOperations gridFsOperations;
 
-	@Before
-	public void before() {
+	@BeforeEach
+	void before() {
 		gridFsOperations.delete(new Query());
 	}
 
 	@Test
-	public void shouldStoreSimpleFile() throws IOException {
+	void shouldStoreSimpleFile() throws IOException {
 
 		try (InputStream is = new BufferedInputStream(new ClassPathResource("./example-file.txt").getInputStream())) {
 			// store file
@@ -71,7 +66,7 @@ public class GridFsTests {
 	}
 
 	@Test
-	public void shouldStoreFileWithMetadata() throws IOException {
+	void shouldStoreFileWithMetadata() throws IOException {
 
 		try (InputStream is = new BufferedInputStream(new ClassPathResource("./example-file.txt").getInputStream())) {
 
@@ -86,7 +81,7 @@ public class GridFsTests {
 	}
 
 	@Test
-	public void shouldStoreAndReadFile() throws IOException {
+	void shouldStoreAndReadFile() throws IOException {
 
 		byte[] bytes;
 		try (InputStream is = new BufferedInputStream(new ClassPathResource("./example-file.txt").getInputStream())) {
diff --git a/mongodb/jmolecules/src/test/java/example/springdata/mongodb/ApplicationIntegrationTests.java b/mongodb/jmolecules/src/test/java/example/springdata/mongodb/ApplicationIntegrationTests.java
index 5754e3aa..f3b6747f 100644
--- a/mongodb/jmolecules/src/test/java/example/springdata/mongodb/ApplicationIntegrationTests.java
+++ b/mongodb/jmolecules/src/test/java/example/springdata/mongodb/ApplicationIntegrationTests.java
@@ -26,14 +26,14 @@ import lombok.RequiredArgsConstructor;
 
 import org.junit.jupiter.api.Test;
 
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
 
 /**
  * @author Oliver Drotbohm
  */
-@SpringBootTest
+@DataMongoTest
 @RequiredArgsConstructor
 class ApplicationIntegrationTests {
 
diff --git a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/FlowAndCoroutinesTests.kt b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/FlowAndCoroutinesTests.kt
index 2481308b..f8fb7106 100644
--- a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/FlowAndCoroutinesTests.kt
+++ b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/FlowAndCoroutinesTests.kt
@@ -17,20 +17,18 @@ package example.springdata.mongodb.people
 
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.toList
-import kotlinx.coroutines.reactive.awaitSingle
 import kotlinx.coroutines.reactive.asFlow
+import kotlinx.coroutines.reactive.awaitSingle
 import kotlinx.coroutines.runBlocking
 import org.assertj.core.api.Assertions.assertThat
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest
 import org.springframework.data.mongodb.core.*
 import org.springframework.data.mongodb.core.query.Criteria.where
 import org.springframework.data.mongodb.core.query.Query
 import org.springframework.data.mongodb.core.query.isEqualTo
-import org.springframework.test.context.junit4.SpringRunner
 import reactor.test.StepVerifier
 
 /**
@@ -38,27 +36,29 @@ import reactor.test.StepVerifier
  *
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner::class)
-@SpringBootTest
+@DataMongoTest
 class FlowAndCoroutinesTests {
 
 	@Autowired
 	lateinit var operations: ReactiveMongoOperations
 
-	@Before
+	@BeforeEach
 	fun before() {
-		StepVerifier.create(operations.dropCollection()).verifyComplete()
+		operations.dropCollection().`as`(StepVerifier::create).verifyComplete()
 	}
 
 	@Test
 	fun `find - the coroutine way`() {
 
-		StepVerifier.create(operations.insert().one(Person("Tyrion", "Lannister"))).expectNextCount(1).verifyComplete()
+		StepVerifier.create(
+			operations.insert().one(Person("Tyrion", "Lannister"))
+		).expectNextCount(1).verifyComplete()
 
 		assertThat(
-				runBlocking {
-					operations.find(Query(where("firstname").isEqualTo("Tyrion"))).awaitSingle()
-				}
+			runBlocking {
+				operations.find(Query(where("firstname").isEqualTo("Tyrion")))
+					.awaitSingle()
+			}
 		).extracting("firstname").isEqualTo("Tyrion")
 	}
 
diff --git a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/MongoDslTests.kt b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/MongoDslTests.kt
index 27b6d7c3..b4f35d47 100644
--- a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/MongoDslTests.kt
+++ b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/MongoDslTests.kt
@@ -16,10 +16,11 @@
 package example.springdata.mongodb.people;
 
 import org.assertj.core.api.Assertions.assertThat
-import org.junit.Before
-import org.junit.Test
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
 import org.junit.runner.RunWith
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest
 import org.springframework.boot.test.context.SpringBootTest
 import org.springframework.data.mongodb.core.MongoOperations
 import org.springframework.data.mongodb.core.dropCollection
@@ -36,14 +37,13 @@ import org.springframework.test.context.junit4.SpringRunner
  *
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner::class)
-@SpringBootTest
+@DataMongoTest
 class MongoDslTests {
 
 	@Autowired
 	lateinit var operations: MongoOperations
 
-	@Before
+	@BeforeEach
 	fun before() {
 		operations.dropCollection()
 	}
diff --git a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/RepositoryTests.kt b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/RepositoryTests.kt
index 483363a3..e7fefdcf 100644
--- a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/RepositoryTests.kt
+++ b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/RepositoryTests.kt
@@ -17,27 +17,24 @@ package example.springdata.mongodb.people
 
 import org.assertj.core.api.Assertions.assertThat
 import org.assertj.core.api.Assertions.assertThatThrownBy
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest
 import org.springframework.dao.EmptyResultDataAccessException
-import org.springframework.test.context.junit4.SpringRunner
 
 /**
  * Tests showing Kotlin usage of Spring Data Repositories.
  *
  * @author Mark Paluch
  */
-@RunWith(SpringRunner::class)
-@SpringBootTest
+@DataMongoTest
 class RepositoryTests {
 
 	@Autowired
 	lateinit var repository: PersonRepository
 
-	@Before
+	@BeforeEach
 	fun before() {
 		repository.deleteAll()
 	}
diff --git a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/TemplateTests.kt b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/TemplateTests.kt
index dbc9a1bb..78f65fb3 100644
--- a/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/TemplateTests.kt
+++ b/mongodb/kotlin/src/test/kotlin/example/springdata/mongodb/people/TemplateTests.kt
@@ -17,30 +17,27 @@ package example.springdata.mongodb.people
 
 import org.assertj.core.api.Assertions.assertThat
 import org.bson.Document
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest
 import org.springframework.data.mongodb.core.*
 import org.springframework.data.mongodb.core.query.Criteria.where
 import org.springframework.data.mongodb.core.query.Query.query
 import org.springframework.data.mongodb.core.query.isEqualTo
-import org.springframework.test.context.junit4.SpringRunner
 
 /**
  * Tests showing Kotlin usage of [MongoTemplate] and its Kotlin extensions.
  *
  * @author Mark Paluch
  */
-@RunWith(SpringRunner::class)
-@SpringBootTest
+@DataMongoTest
 class TemplateTests {
 
 	@Autowired
 	lateinit var operations: MongoOperations
 
-	@Before
+	@BeforeEach
 	fun before() {
 		operations.dropCollection()
 	}
diff --git a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/ContactRepositoryIntegrationTests.java b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/ContactRepositoryIntegrationTests.java
index 657ec91b..0941d42c 100644
--- a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/ContactRepositoryIntegrationTests.java
+++ b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/ContactRepositoryIntegrationTests.java
@@ -15,21 +15,16 @@
  */
 package example.springdata.mongodb.querybyexample;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.*;
 import static org.springframework.data.domain.ExampleMatcher.*;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.domain.Example;
-import org.springframework.data.domain.ExampleMatcher.StringMatcher;
 import org.springframework.data.mongodb.core.MongoOperations;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * Integration test showing the usage of MongoDB Query-by-Example support through Spring Data repositories for a case
@@ -39,19 +34,18 @@ import org.springframework.test.context.junit4.SpringRunner;
  * @author Oliver Gierke
  * @soundtrack Paul van Dyk - VONYC Sessions Episode 496 with guest Armin van Buuren
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ContactRepositoryIntegrationTests {
+@DataMongoTest
+class ContactRepositoryIntegrationTests {
 
 	@Autowired UserRepository userRepository;
 	@Autowired ContactRepository contactRepository;
 	@Autowired MongoOperations mongoOperations;
 
-	Person skyler, walter, flynn;
-	Relative marie, hank;
+	private Person skyler, walter, flynn;
+	private Relative marie, hank;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		contactRepository.deleteAll();
 
@@ -66,36 +60,36 @@ public class ContactRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void countByConcreteSubtypeExample() {
+	void countByConcreteSubtypeExample() {
 
 		var example = Example.of(new Person(null, null, null));
 
-		assertThat(userRepository.count(example), is(3L));
+		assertThat(userRepository.count(example)).isEqualTo(3L);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void findAllPersonsBySimpleExample() {
+	void findAllPersonsBySimpleExample() {
 
 		var example = Example.of(new Person(".*", null, null), //
 				matching().withStringMatcher(StringMatcher.REGEX));
 
-		assertThat(userRepository.findAll(example), containsInAnyOrder(skyler, walter, flynn));
-		assertThat(userRepository.findAll(example), not(containsInAnyOrder(hank, marie)));
+		assertThat(userRepository.findAll(example)).contains(skyler, walter, flynn);
+		assertThat((Iterable) userRepository.findAll(example)).doesNotContain(hank, marie);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void findAllRelativesBySimpleExample() {
+	void findAllRelativesBySimpleExample() {
 
 		var example = Example.of(new Relative(".*", null, null), //
 				matching().withStringMatcher(StringMatcher.REGEX));
 
-		assertThat(contactRepository.findAll(example), containsInAnyOrder(hank, marie));
-		assertThat(contactRepository.findAll(example), not(containsInAnyOrder(skyler, walter, flynn)));
+		assertThat(contactRepository.findAll(example)).contains(hank, marie);
+		assertThat((Iterable) contactRepository.findAll(example)).doesNotContain(skyler, walter, flynn);
 	}
 }
diff --git a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/MongoOperationsIntegrationTests.java b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/MongoOperationsIntegrationTests.java
index ebd765dc..884d5a08 100644
--- a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/MongoOperationsIntegrationTests.java
+++ b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/MongoOperationsIntegrationTests.java
@@ -16,8 +16,7 @@
 
 package example.springdata.mongodb.querybyexample;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.springframework.data.domain.ExampleMatcher.*;
 import static org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers.*;
 import static org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers.startsWith;
@@ -26,16 +25,15 @@ import static org.springframework.data.mongodb.core.query.Query.*;
 
 import java.util.Optional;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.ExampleMatcher.StringMatcher;
 import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * Integration test showing the usage of MongoDB Query-by-Example support through Spring Data repositories.
@@ -44,16 +42,15 @@ import org.springframework.test.context.junit4.SpringRunner;
  * @author Oliver Gierke
  */
 @SuppressWarnings("unused")
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class MongoOperationsIntegrationTests {
+@DataMongoTest
+class MongoOperationsIntegrationTests {
 
 	@Autowired MongoOperations operations;
 
-	Person skyler, walter, flynn, marie, hank;
+	private Person skyler, walter, flynn, marie, hank;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		operations.remove(new Query(), Person.class);
 
@@ -74,74 +71,74 @@ public class MongoOperationsIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void ignoreNullProperties() {
+	void ignoreNullProperties() {
 
 		var query = query(byExample(new Person(null, null, 17)));
 
-		assertThat(operations.find(query, Person.class), hasItems(flynn));
+		assertThat(operations.find(query, Person.class)).contains(flynn);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void substringMatching() {
+	void substringMatching() {
 
 		var example = Example.of(new Person("er", null, null), matching().//
 				withStringMatcher(StringMatcher.ENDING));
 
-		assertThat(operations.find(query(byExample(example)), Person.class), hasItems(skyler, walter));
+		assertThat(operations.find(query(byExample(example)), Person.class)).contains(skyler, walter);
 	}
 
 	/**
 	 * @see #154
 	 */
 	@Test
-	public void regexMatching() {
+	void regexMatching() {
 
 		var example = Example.of(new Person("(Skyl|Walt)er", null, null), matching().//
 				withMatcher("firstname", GenericPropertyMatcher::regex));
 
-		assertThat(operations.find(query(byExample(example)), Person.class), hasItems(skyler, walter));
+		assertThat(operations.find(query(byExample(example)), Person.class)).contains(skyler, walter);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void matchStartingStringsIgnoreCase() {
+	void matchStartingStringsIgnoreCase() {
 
 		var example = Example.of(new Person("Walter", "WHITE", null), matching(). //
 				withIgnorePaths("age").//
 				withMatcher("firstname", startsWith()).//
 				withMatcher("lastname", ignoreCase()));
 
-		assertThat(operations.find(query(byExample(example)), Person.class), hasItems(flynn, walter));
+		assertThat(operations.find(query(byExample(example)), Person.class)).contains(flynn, walter);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void configuringMatchersUsingLambdas() {
+	void configuringMatchersUsingLambdas() {
 
 		var example = Example.of(new Person("Walter", "WHITE", null), matching().//
 				withIgnorePaths("age"). //
 				withMatcher("firstname", GenericPropertyMatcher::startsWith). //
 				withMatcher("lastname", GenericPropertyMatcher::ignoreCase));
 
-		assertThat(operations.find(query(byExample(example)), Person.class), hasItems(flynn, walter));
+		assertThat(operations.find(query(byExample(example)), Person.class)).contains(flynn, walter);
 	}
 
 	/**
 	 * @see #153
 	 */
 	@Test
-	public void valueTransformer() {
+	void valueTransformer() {
 
 		var example = Example.of(new Person(null, "White", 99), matching(). //
 				withMatcher("age", matcher -> matcher.transform(value -> Optional.of(50))));
 
-		assertThat(operations.find(query(byExample(example)), Person.class), hasItems(walter));
+		assertThat(operations.find(query(byExample(example)), Person.class)).contains(walter);
 	}
 }
diff --git a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/UserRepositoryIntegrationTests.java b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/UserRepositoryIntegrationTests.java
index 93fe2a40..2305aa99 100644
--- a/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/UserRepositoryIntegrationTests.java
+++ b/mongodb/query-by-example/src/test/java/example/springdata/mongodb/querybyexample/UserRepositoryIntegrationTests.java
@@ -21,14 +21,13 @@ import static org.springframework.data.domain.ExampleMatcher.GenericPropertyMatc
 
 import java.util.Optional;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.domain.Example;
-import org.springframework.data.domain.ExampleMatcher.StringMatcher;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.data.domain.ExampleMatcher.*;
 
 /**
  * Integration test showing the usage of MongoDB Query-by-Example support through Spring Data repositories.
@@ -38,16 +37,15 @@ import org.springframework.test.context.junit4.SpringRunner;
  * @author Jens Schauder
  */
 @SuppressWarnings("unused")
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class UserRepositoryIntegrationTests {
+@DataMongoTest
+class UserRepositoryIntegrationTests {
 
 	@Autowired UserRepository repository;
 
-	Person skyler, walter, flynn, marie, hank;
+	private Person skyler, walter, flynn, marie, hank;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		repository.deleteAll();
 
@@ -62,7 +60,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void countBySimpleExample() {
+	void countBySimpleExample() {
 
 		var example = Example.of(new Person(null, "White", null));
 
@@ -73,7 +71,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void ignorePropertiesAndMatchByAge() {
+	void ignorePropertiesAndMatchByAge() {
 
 		var example = Example.of(flynn, matching(). //
 				withIgnorePaths("firstname", "lastname"));
@@ -85,7 +83,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void substringMatching() {
+	void substringMatching() {
 
 		var example = Example.of(new Person("er", null, null), matching(). //
 				withStringMatcher(StringMatcher.ENDING));
@@ -97,7 +95,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void regexMatching() {
+	void regexMatching() {
 
 		var example = Example.of(new Person("(Skyl|Walt)er", null, null), matching(). //
 				withMatcher("firstname", GenericPropertyMatcher::regex));
@@ -109,7 +107,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void matchStartingStringsIgnoreCase() {
+	void matchStartingStringsIgnoreCase() {
 
 		var example = Example.of(new Person("Walter", "WHITE", null), matching(). //
 				withIgnorePaths("age"). //
@@ -123,7 +121,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void configuringMatchersUsingLambdas() {
+	void configuringMatchersUsingLambdas() {
 
 		var example = Example.of(new Person("Walter", "WHITE", null), matching(). //
 				withIgnorePaths("age"). //
@@ -137,7 +135,7 @@ public class UserRepositoryIntegrationTests {
 	 * @see #153
 	 */
 	@Test
-	public void valueTransformer() {
+	void valueTransformer() {
 
 		var example = Example.of(new Person(null, "White", 99), matching(). //
 				withMatcher("age", matcher -> matcher.transform(value -> Optional.of(50))));
diff --git a/mongodb/querydsl/src/test/java/example/springdata/mongodb/imperative/CustomerRepositoryTests.java b/mongodb/querydsl/src/test/java/example/springdata/mongodb/imperative/CustomerRepositoryTests.java
index 3ead386b..887cf8e7 100644
--- a/mongodb/querydsl/src/test/java/example/springdata/mongodb/imperative/CustomerRepositoryTests.java
+++ b/mongodb/querydsl/src/test/java/example/springdata/mongodb/imperative/CustomerRepositoryTests.java
@@ -20,29 +20,26 @@ import static org.assertj.core.api.Assertions.*;
 import example.springdata.mongodb.Customer;
 import example.springdata.mongodb.QCustomer;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.mongodb.core.MongoOperations;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class CustomerRepositoryTests {
+@DataMongoTest
+class CustomerRepositoryTests {
 
 	@Autowired CustomerQuerydslRepository repository;
 	@Autowired MongoOperations operations;
 
-	Customer dave, oliver, carter;
+	private Customer dave, oliver, carter;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		repository.deleteAll();
 
@@ -52,7 +49,7 @@ public class CustomerRepositoryTests {
 	}
 
 	@Test
-	public void findAllByPredicate() {
+	void findAllByPredicate() {
 		assertThat(repository.findAll(QCustomer.customer.lastname.eq("Matthews"))).containsExactlyInAnyOrder(dave, oliver);
 	}
 
diff --git a/mongodb/querydsl/src/test/java/example/springdata/mongodb/reactive/ReactiveCustomerRepositoryTests.java b/mongodb/querydsl/src/test/java/example/springdata/mongodb/reactive/ReactiveCustomerRepositoryTests.java
index 80616e19..e5adc1e2 100644
--- a/mongodb/querydsl/src/test/java/example/springdata/mongodb/reactive/ReactiveCustomerRepositoryTests.java
+++ b/mongodb/querydsl/src/test/java/example/springdata/mongodb/reactive/ReactiveCustomerRepositoryTests.java
@@ -19,33 +19,30 @@ import static org.assertj.core.api.Assertions.*;
 
 import example.springdata.mongodb.Customer;
 import example.springdata.mongodb.QCustomer;
+import org.junit.jupiter.api.Test;
 import reactor.test.StepVerifier;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.mongodb.core.MongoOperations;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ReactiveCustomerRepositoryTests {
+@DataMongoTest
+class ReactiveCustomerRepositoryTests {
 
 	@Autowired ReactiveCustomerQuerydslRepository repository;
 	@Autowired MongoOperations operations;
 
-	Customer dave, oliver, carter;
+	private Customer dave, oliver, carter;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		repository.deleteAll().as(StepVerifier::create).verifyComplete();
 
@@ -57,7 +54,7 @@ public class ReactiveCustomerRepositoryTests {
 	}
 
 	@Test
-	public void findAllByPredicate() {
+	void findAllByPredicate() {
 
 		repository.findAll(QCustomer.customer.lastname.eq("Matthews")) //
 				.collectList() //
diff --git a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactiveMongoTemplateIntegrationTest.java b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactiveMongoTemplateIntegrationTest.java
index 9bc02cff..530260fa 100644
--- a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactiveMongoTemplateIntegrationTest.java
+++ b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactiveMongoTemplateIntegrationTest.java
@@ -18,35 +18,32 @@ package example.springdata.mongodb.people;
 import static org.assertj.core.api.Assertions.*;
 
 import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
 import rx.RxReactiveStreams;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * Integration test for {@link ReactiveMongoTemplate}.
  *
  * @author Mark Paluch
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ReactiveMongoTemplateIntegrationTest {
+@DataMongoTest
+class ReactiveMongoTemplateIntegrationTest {
 
 	@Autowired ReactiveMongoTemplate template;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		StepVerifier.create(template.dropCollection(Person.class)).verifyComplete();
 
@@ -56,7 +53,7 @@ public class ReactiveMongoTemplateIntegrationTest {
 						new Person("Saul", "Goodman", 42), //
 						new Person("Jesse", "Pinkman", 27)).collectList());
 
-		StepVerifier.create(insertAll).expectNextCount(4).verifyComplete();
+		insertAll.as(StepVerifier::create).expectNextCount(4).verifyComplete();
 	}
 
 	/**
@@ -64,7 +61,7 @@ public class ReactiveMongoTemplateIntegrationTest {
 	 * the two counts ({@code 4} and {@code 6}) to the console.
 	 */
 	@Test
-	public void shouldInsertAndCountData() {
+	void shouldInsertAndCountData() {
 
 		var count = template.count(new Query(), Person.class) //
 				.doOnNext(System.out::println) //
@@ -74,14 +71,14 @@ public class ReactiveMongoTemplateIntegrationTest {
 				.flatMap(v -> template.count(new Query(), Person.class)) //
 				.doOnNext(System.out::println);//
 
-		StepVerifier.create(count).expectNext(6L).verifyComplete();
+		count.as(StepVerifier::create).expectNext(6L).verifyComplete();
 	}
 
 	/**
 	 * Note that the all object conversions are performed before the results are printed to the console.
 	 */
 	@Test
-	public void convertReactorTypesToRxJava2() {
+	void convertReactorTypesToRxJava2() {
 
 		var flux = template.find(Query.query(Criteria.where("lastname").is("White")), Person.class);
 
diff --git a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactivePersonRepositoryIntegrationTest.java b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactivePersonRepositoryIntegrationTest.java
index 121bb4d1..3ecc7ff4 100644
--- a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactivePersonRepositoryIntegrationTest.java
+++ b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/ReactivePersonRepositoryIntegrationTest.java
@@ -17,7 +17,6 @@ package example.springdata.mongodb.people;
 
 import static org.assertj.core.api.Assertions.*;
 
-import reactor.core.Disposable;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
@@ -25,32 +24,27 @@ import reactor.test.StepVerifier;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
-import org.bson.Document;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.mongodb.core.CollectionOptions;
 import org.springframework.data.mongodb.core.ReactiveMongoOperations;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.mongodb.reactivestreams.client.MongoCollection;
 
 /**
  * Integration test for {@link ReactivePersonRepository} using Project Reactor types and operators.
  *
  * @author Mark Paluch
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ReactivePersonRepositoryIntegrationTest {
+@DataMongoTest
+class ReactivePersonRepositoryIntegrationTest {
 
 	@Autowired ReactivePersonRepository repository;
 	@Autowired ReactiveMongoOperations operations;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		var recreateCollection = operations.collectionExists(Person.class) //
 				.flatMap(exists -> exists ? operations.dropCollection(Person.class) : Mono.just(exists)) //
@@ -59,14 +53,14 @@ public class ReactivePersonRepositoryIntegrationTest {
 						.maxDocuments(100) //
 						.capped()));
 
-		StepVerifier.create(recreateCollection).expectNextCount(1).verifyComplete();
+		recreateCollection.as(StepVerifier::create).expectNextCount(1).verifyComplete();
 
 		var insertAll = operations.insertAll(Flux.just(new Person("Walter", "White", 50), //
 						new Person("Skyler", "White", 45), //
 						new Person("Saul", "Goodman", 42), //
 				new Person("Jesse", "Pinkman", 27)).collectList());
 
-		StepVerifier.create(insertAll).expectNextCount(4).verifyComplete();
+		insertAll.as(StepVerifier::create).expectNextCount(4).verifyComplete();
 	}
 
 	/**
@@ -74,7 +68,7 @@ public class ReactivePersonRepositoryIntegrationTest {
 	 * the two counts ({@code 4} and {@code 6}) to the console.
 	 */
 	@Test
-	public void shouldInsertAndCountData() {
+	void shouldInsertAndCountData() {
 
 		var saveAndCount = repository.count() //
 				.doOnNext(System.out::println) //
@@ -84,16 +78,17 @@ public class ReactivePersonRepositoryIntegrationTest {
 				.flatMap(v -> repository.count()) //
 				.doOnNext(System.out::println);
 
-		StepVerifier.create(saveAndCount).expectNext(6L).verifyComplete();
+		saveAndCount.as(StepVerifier::create).expectNext(6L).verifyComplete();
 	}
 
 	/**
 	 * Note that the all object conversions are performed before the results are printed to the console.
 	 */
 	@Test
-	public void shouldPerformConversionBeforeResultProcessing() {
+	void shouldPerformConversionBeforeResultProcessing() {
 
-		StepVerifier.create(repository.findAll().doOnNext(System.out::println)) //
+		repository.findAll().doOnNext(System.out::println) //
+				.as(StepVerifier::create) //
 				.expectNextCount(4) //
 				.verifyComplete();
 	}
@@ -102,7 +97,7 @@ public class ReactivePersonRepositoryIntegrationTest {
 	 * A tailable cursor streams data using {@link Flux} as it arrives inside the capped collection.
 	 */
 	@Test
-	public void shouldStreamDataWithTailableCursor() throws Exception {
+	void shouldStreamDataWithTailableCursor() throws Exception {
 
 		Queue people = new ConcurrentLinkedQueue<>();
 
@@ -115,19 +110,22 @@ public class ReactivePersonRepositoryIntegrationTest {
 
 		Thread.sleep(100);
 
-		StepVerifier.create(repository.save(new Person("Tuco", "Salamanca", 33))) //
+		repository.save(new Person("Tuco", "Salamanca", 33)) //
+				.as(StepVerifier::create) //
 				.expectNextCount(1) //
 				.verifyComplete();
 		Thread.sleep(100);
 
-		StepVerifier.create(repository.save(new Person("Mike", "Ehrmantraut", 62))) //
+		repository.save(new Person("Mike", "Ehrmantraut", 62)) //
+				.as(StepVerifier::create) //
 				.expectNextCount(1) //
 				.verifyComplete();
 		Thread.sleep(100);
 
 		disposable.dispose();
 
-		StepVerifier.create(repository.save(new Person("Gus", "Fring", 53))) //
+		repository.save(new Person("Gus", "Fring", 53)) //
+				.as(StepVerifier::create) //
 				.expectNextCount(1) //
 				.verifyComplete();
 		Thread.sleep(100);
@@ -139,33 +137,34 @@ public class ReactivePersonRepositoryIntegrationTest {
 	 * Fetch data using query derivation.
 	 */
 	@Test
-	public void shouldQueryDataWithQueryDerivation() {
-		StepVerifier.create(repository.findByLastname("White")).expectNextCount(2).verifyComplete();
+	void shouldQueryDataWithQueryDerivation() {
+		repository.findByLastname("White").as(StepVerifier::create).expectNextCount(2).verifyComplete();
 	}
 
 	/**
 	 * Fetch data using a string query.
 	 */
 	@Test
-	public void shouldQueryDataWithStringQuery() {
-		StepVerifier.create(repository.findByFirstnameAndLastname("Walter", "White")).expectNextCount(1).verifyComplete();
+	void shouldQueryDataWithStringQuery() {
+		repository.findByFirstnameAndLastname("Walter", "White").as(StepVerifier::create).expectNextCount(1)
+				.verifyComplete();
 	}
 
 	/**
 	 * Fetch data using query derivation.
 	 */
 	@Test
-	public void shouldQueryDataWithDeferredQueryDerivation() {
-		StepVerifier.create(repository.findByLastname(Mono.just("White"))).expectNextCount(2).verifyComplete();
+	void shouldQueryDataWithDeferredQueryDerivation() {
+		repository.findByLastname(Mono.just("White")).as(StepVerifier::create).expectNextCount(2).verifyComplete();
 	}
 
 	/**
 	 * Fetch data using query derivation and deferred parameter resolution.
 	 */
 	@Test
-	public void shouldQueryDataWithMixedDeferredQueryDerivation() {
+	void shouldQueryDataWithMixedDeferredQueryDerivation() {
 
-		StepVerifier.create(repository.findByFirstnameAndLastname(Mono.just("Walter"), "White")) //
+		repository.findByFirstnameAndLastname(Mono.just("Walter"), "White").as(StepVerifier::create) //
 				.expectNextCount(1) //
 				.verifyComplete();
 	}
diff --git a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/RxJava2PersonRepositoryIntegrationTest.java b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/RxJava2PersonRepositoryIntegrationTest.java
index 5c2fe2fa..b29dca01 100644
--- a/mongodb/reactive/src/test/java/example/springdata/mongodb/people/RxJava2PersonRepositoryIntegrationTest.java
+++ b/mongodb/reactive/src/test/java/example/springdata/mongodb/people/RxJava2PersonRepositoryIntegrationTest.java
@@ -19,24 +19,19 @@ import static org.assertj.core.api.Assertions.*;
 
 import io.reactivex.Flowable;
 import io.reactivex.Single;
-import io.reactivex.disposables.Disposable;
 import reactor.core.publisher.Mono;
 import reactor.test.StepVerifier;
 
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
-import org.bson.Document;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.data.mongodb.core.CollectionOptions;
 import org.springframework.data.mongodb.core.ReactiveMongoOperations;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.mongodb.reactivestreams.client.MongoCollection;
 
 /**
  * Integration test for {@link RxJava2PersonRepository} using RxJava2 types. Note that {@link ReactiveMongoOperations}
@@ -47,15 +42,14 @@ import com.mongodb.reactivestreams.client.MongoCollection;
  * @author Jens Schauder
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class RxJava2PersonRepositoryIntegrationTest {
+@DataMongoTest
+class RxJava2PersonRepositoryIntegrationTest {
 
 	@Autowired RxJava2PersonRepository repository;
 	@Autowired ReactiveMongoOperations operations;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 
 		var recreateCollection = operations.collectionExists(Person.class) //
 				.flatMap(exists -> exists ? operations.dropCollection(Person.class) : Mono.just(exists)) //
@@ -81,7 +75,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * the two counts ({@code 4} and {@code 6}) to the console.
 	 */
 	@Test
-	public void shouldInsertAndCountData() {
+	void shouldInsertAndCountData() {
 
 		var people = Flowable.just(new Person("Hank", "Schrader", 43), //
 				new Person("Mike", "Ehrmantraut", 62));
@@ -105,7 +99,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * Note that the all object conversions are performed before the results are printed to the console.
 	 */
 	@Test
-	public void shouldPerformConversionBeforeResultProcessing() {
+	void shouldPerformConversionBeforeResultProcessing() {
 
 		repository.findAll() //
 				.doOnNext(System.out::println) //
@@ -120,7 +114,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * A tailable cursor streams data using {@link Flowable} as it arrives inside the capped collection.
 	 */
 	@Test
-	public void shouldStreamDataWithTailableCursor() throws Exception {
+	void shouldStreamDataWithTailableCursor() throws Exception {
 
 		Queue people = new ConcurrentLinkedQueue<>();
 
@@ -151,7 +145,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * Fetch data using query derivation.
 	 */
 	@Test
-	public void shouldQueryDataWithQueryDerivation() {
+	void shouldQueryDataWithQueryDerivation() {
 
 		repository.findByLastname("White") //
 				.test() //
@@ -165,7 +159,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * Fetch data using a string query.
 	 */
 	@Test
-	public void shouldQueryDataWithStringQuery() {
+	void shouldQueryDataWithStringQuery() {
 
 		repository.findByFirstnameAndLastname("Walter", "White") //
 				.test() //
@@ -178,7 +172,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * Fetch data using query derivation.
 	 */
 	@Test
-	public void shouldQueryDataWithDeferredQueryDerivation() {
+	void shouldQueryDataWithDeferredQueryDerivation() {
 
 		repository.findByLastname(Single.just("White")) //
 				.test() //
@@ -191,7 +185,7 @@ public class RxJava2PersonRepositoryIntegrationTest {
 	 * Fetch data using query derivation and deferred parameter resolution.
 	 */
 	@Test
-	public void shouldQueryDataWithMixedDeferredQueryDerivation() {
+	void shouldQueryDataWithMixedDeferredQueryDerivation() {
 
 		repository.findByFirstnameAndLastname(Single.just("Walter"), "White") //
 				.test() //
diff --git a/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidation.java b/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidationTests.java
similarity index 89%
rename from mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidation.java
rename to mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidationTests.java
index 24b60c94..8d7c36d3 100644
--- a/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidation.java
+++ b/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/DocumentValidationTests.java
@@ -19,31 +19,29 @@ import static org.assertj.core.api.Assertions.*;
 import static org.springframework.data.mongodb.core.query.Criteria.*;
 import static org.springframework.data.mongodb.core.schema.JsonSchemaProperty.*;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.data.mongodb.core.CollectionOptions;
 import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
 import org.springframework.data.mongodb.core.validation.Validator;
-import org.springframework.test.context.junit4.SpringRunner;
 
 /**
  * @author Christoph Strobl
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class DocumentValidation {
+@DataMongoTest
+class DocumentValidationTests {
 
-	static final String COLLECTION = "star-wars";
+	private static final String COLLECTION = "star-wars";
 
 	@Autowired MongoOperations mongoOps;
 
-	@Before
-	public void setUp() {
+	@BeforeEach
+	void setUp() {
 		mongoOps.dropCollection(COLLECTION);
 	}
 
@@ -72,7 +70,7 @@ public class DocumentValidation {
 	 * 
*/ @Test - public void criteriaValidator() { + void criteriaValidator() { var validator = Validator.criteria( // where("name").exists(true).ne(null).type(2) // non null String @@ -114,7 +112,7 @@ public class DocumentValidation { *
*/ @Test - public void schemaValidator() { + void schemaValidator() { var validator = Validator.schema(MongoJsonSchema.builder() // .required("name", "age") // diff --git a/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQuery.java b/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQueryTests.java similarity index 85% rename from mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQuery.java rename to mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQueryTests.java index d598e343..345b060a 100644 --- a/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQuery.java +++ b/mongodb/schema-validation/src/test/java/example/springdata/mongodb/schema/SchemaQueryTests.java @@ -20,28 +20,26 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.data.mongodb.core.schema.JsonSchemaProperty.*; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.schema.MongoJsonSchema; -import org.springframework.test.context.junit4.SpringRunner; /** * @author Christoph Strobl */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class SchemaQuery { +@DataMongoTest +class SchemaQueryTests { - static final String COLLECTION = "star-wars"; + private static final String COLLECTION = "star-wars"; @Autowired MongoOperations mongoOps; - @Before - public void setUp() { + @BeforeEach + void setUp() { mongoOps.dropCollection(COLLECTION); } @@ -73,7 +71,7 @@ public class SchemaQuery { * */ @Test - public void criteriaValidator() { + void criteriaValidator() { var luke = new Jedi("luke", "luke", "skywalker", 25); var yoda = new Jedi("yoda", "yoda", null, 900); diff --git a/mongodb/security/src/test/java/example/springdata/mongodb/security/PersonRepositoryIntegrationTest.java b/mongodb/security/src/test/java/example/springdata/mongodb/security/PersonRepositoryIntegrationTest.java index 7c0cf40c..8ada00b8 100644 --- a/mongodb/security/src/test/java/example/springdata/mongodb/security/PersonRepositoryIntegrationTest.java +++ b/mongodb/security/src/test/java/example/springdata/mongodb/security/PersonRepositoryIntegrationTest.java @@ -15,21 +15,18 @@ */ package example.springdata.mongodb.security; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; import java.util.Collections; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration test for {@link PersonRepository}. @@ -37,16 +34,15 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Thomas Darimont * @author Oliver Gierke */ -@RunWith(SpringRunner.class) @SpringBootTest -public class PersonRepositoryIntegrationTest { +class PersonRepositoryIntegrationTest { @Autowired PersonRepository repository; - Person dave, oliver, carter, admin; + private Person dave, oliver, carter, admin; - @Before - public void setUp() { + @BeforeEach + void setUp() { repository.deleteAll(); @@ -57,18 +53,17 @@ public class PersonRepositoryIntegrationTest { } @Test - public void nonAdminCallingShouldReturnOnlyItSelfAsPerson() throws Exception { + void nonAdminCallingShouldReturnOnlyItSelfAsPerson() throws Exception { SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(dave, "x")); var persons = repository.findAllForCurrentUserById(); - assertThat(persons, hasSize(1)); - assertThat(persons, contains(dave)); + assertThat(persons).hasSize(1).containsExactly(dave); } @Test - public void adminCallingShouldReturnAllUsers() throws Exception { + void adminCallingShouldReturnAllUsers() throws Exception { var auth = new UsernamePasswordAuthenticationToken(admin, "x", Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN"))); @@ -76,7 +71,6 @@ public class PersonRepositoryIntegrationTest { var persons = repository.findAllForCurrentUserById(); - assertThat(persons, hasSize(4)); - assertThat(persons, containsInAnyOrder(admin, dave, carter, oliver)); + assertThat(persons).hasSize(4).contains(admin, dave, carter, oliver); } } diff --git a/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchRepositoryTests.java b/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchRepositoryTests.java index 901bc6f4..9cd7428d 100644 --- a/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchRepositoryTests.java +++ b/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchRepositoryTests.java @@ -17,15 +17,12 @@ package example.springdata.mongodb.textsearch; import static example.springdata.mongodb.util.ConsoleResultPrinter.*; -import java.util.List; +import org.junit.jupiter.api.Test; -import org.junit.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.data.mongodb.core.mapping.TextScore; import org.springframework.data.mongodb.core.query.TextCriteria; -import org.springframework.test.context.junit4.SpringRunner; /** * Integration tests showing the text search functionality using repositories. @@ -34,9 +31,8 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Oliver Gierke * @author Thomas Darimont */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class TextSearchRepositoryTests { +@DataMongoTest +class TextSearchRepositoryTests { @Autowired BlogPostRepository repo; @@ -45,7 +41,7 @@ public class TextSearchRepositoryTests { * Note that text search is case insensitive and will also find entries like {@literal releases}. */ @Test - public void findAllBlogPostsWithRelease() { + void findAllBlogPostsWithRelease() { var criteria = TextCriteria.forDefaultLanguage().matchingAny("release"); var blogPosts = repo.findAllBy(criteria); @@ -57,7 +53,7 @@ public class TextSearchRepositoryTests { * Simple matching using negation. */ @Test - public void findAllBlogPostsWithReleaseButHeyIDoWantTheEngineeringStuff() { + void findAllBlogPostsWithReleaseButHeyIDoWantTheEngineeringStuff() { var criteria = TextCriteria.forDefaultLanguage().matchingAny("release").notMatching("engineering"); var blogPosts = repo.findAllBy(criteria); @@ -69,7 +65,7 @@ public class TextSearchRepositoryTests { * Phrase matching looks for the whole phrase as one. */ @Test - public void findAllBlogPostsByPhrase() { + void findAllBlogPostsByPhrase() { var criteria = TextCriteria.forDefaultLanguage().matchingPhrase("release candidate"); var blogPosts = repo.findAllBy(criteria); @@ -81,7 +77,7 @@ public class TextSearchRepositoryTests { * Sort by relevance relying on the value marked with {@link TextScore}. */ @Test - public void findAllBlogPostsByPhraseSortByScore() { + void findAllBlogPostsByPhraseSortByScore() { var criteria = TextCriteria.forDefaultLanguage().matchingPhrase("release candidate"); var blogPosts = repo.findAllByOrderByScoreDesc(criteria); diff --git a/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchTemplateTests.java b/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchTemplateTests.java index 2644c099..5072a66a 100644 --- a/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchTemplateTests.java +++ b/mongodb/text-search/src/test/java/example/springdata/mongodb/textsearch/TextSearchTemplateTests.java @@ -18,46 +18,29 @@ package example.springdata.mongodb.textsearch; import static example.springdata.mongodb.util.ConsoleResultPrinter.*; import static org.springframework.data.mongodb.core.query.Query.*; -import java.util.List; +import org.junit.jupiter.api.Test; -import org.junit.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.TextCriteria; import org.springframework.data.mongodb.core.query.TextQuery; -import org.springframework.test.context.junit4.SpringRunner; /** * @author Christoph Strobl * @author Thomas Darimont */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class TextSearchTemplateTests { +@DataMongoTest +class TextSearchTemplateTests { @Autowired MongoOperations operations; - // @Before - // public void setUp() throws Exception { - // - // MongoProperties properties = new MongoProperties(); - // - // operations = new MongoTemplate(properties.createMongoClient(null), properties.getMongoClientDatabase()); - // operations.dropCollection(BlogPost.class); - // - // createIndex(); - // - // BlogPostInitializer.INSTANCE.initialize(this.operations); - // } - /** * Show how to do simple matching. Note that text search is case insensitive and will also find entries like * {@literal releases}. */ @Test - public void findAllBlogPostsWithRelease() { + void findAllBlogPostsWithRelease() { var criteria = TextCriteria.forDefaultLanguage().matchingAny("release"); var blogPosts = operations.find(query(criteria), BlogPost.class); @@ -69,7 +52,7 @@ public class TextSearchTemplateTests { * Sort by relevance relying on the value marked with {@link org.springframework.data.mongodb.core.mapping.TextScore}. */ @Test - public void findAllBlogPostsByPhraseSortByScore() { + void findAllBlogPostsByPhraseSortByScore() { var criteria = TextCriteria.forDefaultLanguage().matchingPhrase("release");