#java #junit #dependency-injection #junit5
Вопрос:
Согласно официальному документу Junit https://junit.org/junit5/docs/current/user-guide/#writing-tests-dependency-injection
В качестве одного из основных изменений в JUnit Jupiter, как конструкторам тестов, так и методам теперь разрешено иметь параметры.
Репозиторий Gradle java-проект
@Singleton
public record Repository(MongoClient mongoClient, MongodbConfiguration mongodbConfiguration) implements IRepository {
@Override
public <T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
return mongoClient
.getDatabase(mongodbConfiguration.database())
.getCollection(collectionName, typeParameterClass);
}
}
Интерфейс
public interface IRepository {
<T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass);
}
Тестирование JUnit
@Testcontainers
public class RepositoryTest {
private final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"));
@Inject
private Repository repository;
@BeforeEach
public void setUp() {
mongoDBContainer.start();
}
@Test
@DisplayName("Should contain product collection document")
void shouldContainProductCollectionDocument() {
var item = this.repository.getCollection("Product", Object.class);
assertEquals(item.getDocumentClass(), "Product");
}
}
Репозиторий равен нулю во время выполнения теста, как мы делаем инъекцию зависимостей в JUnit5. Я не использую фреймворк spring, micronaut или quarkus, это Java-проект plane Gradle
Комментарии:
1. Далее на странице, на которую вы указали ссылку: «Другие преобразователи параметров должны быть явно включены путем регистрации соответствующих расширений через
@ExtendWith
. ПосмотритеRandomParametersExtension
на пример обычаяParameterResolver
. Хотя он не предназначен для подготовки к производству, он демонстрирует простоту и выразительность как модели расширения, так и процесса разрешения параметров.MyRandomParametersTest
демонстрирует, как вводить случайные значения в@Test
методы.»