Внедрение зависимостей для репозитория с JUnit 5 в проекте java

#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 методы.»