Тестирование модулей Spring Boot Library - PullRequest
0 голосов
/ 01 октября 2019

У меня есть многомодульный проект, где не каждый модуль на самом деле является приложением, но многие из них являются библиотеками. Эти библиотеки выполняют основную работу, и я хочу проверить их там, где они реализованы. Текущие зависимости библиотек:

implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

В основном источнике есть класс с @Configuration и одним бином:

@Bean public String testString() { return "A Test String"; }

Я получил 2 тестовых класса:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"}) 
public class Test1 {  

    @Test
    public void conextLoaded() {
    }
}

-

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles({"default", "test"}) 
public class Test2 {  
    @Autowired
    private String testString; 

    @Test
    public void conextLoaded() {
    }
}

Первый тест работает. Второго нет. В этом проекте нигде нет @SpringBootApplication, поэтому в том же пакете, что и в тестах, я добавил конфигурацию теста:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.to.config") 
public class LibTestConfiguration {
}

И это не работает. То же самое для классов, которые @Service. Они не в контексте. Как я могу заставить его вести себя как обычное загрузочное приложение Spring, при этом оно на самом деле не загружается и загружать конфиги и контексты из нужных мне файлов конфигурации? Профиль по умолчанию и тестовый профиль имеют большинство своих свойств (на данный момент), и я хочу, чтобы они загружались, как если бы я запускал tomcat.

1 Ответ

0 голосов
/ 14 октября 2019

Я переключился на JUnit 5 и заставил его работать ... Итак, если вы хотите протестировать базу данных:

@DataMongoTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
class BasicMongoTest { ... }
  • Позволяет автоматически подключать все репозитории и шаблон монго
  • Инициализирует с помощью apllicaton.yml config
  • НЕ инициализирует и не настраивает перехватчики

Полный контекстный тест приложения, если у вас есть класс с @SpringBootApplication в вашем classpath (Может бытьпустая главная тестовая в вашем тестовом контексте)

@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class FullContextTest { ... }
  • Инициализирует полный контекст со всеми конфигами и bean-компонентами
  • Не следует делать, если не нужно, так как он загружает весь контекст приложенияи своего рода побеждает цель модульных тестов, чтобы активировать только то, что нужно.

Тестировать только определенные компоненты и конфигурации:

@SpringBootTest(classes = {Config1.class, Component1.class})
@EnableConfigurationProperties
@ExtendWith(SpringExtension.class)
@ActiveProfiles({"default", "test"})
public class SpecificComponentsTest { ... }
  • Инициализирует контекст толькоклассы Config1 и Component1. Component1 и все bean-компоненты в Config1 могут быть подключены автоматически.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...