Spring Boot, testowanie repozytorium

0

Cześć. Ostatnimi czasy postanowiłem się nauczyć używać Springa. Przez większość czasu szło bez problemów, dopóki nie zachciało mi się przetestować mojego repozytorium. Otóż udało mi się napisać taką klasę (nie zwracajcie uwagi na metodę testową) :

@SpringBootTest(classes = DomainInfrastructureTestConfiguration.class)
@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:test.properties")
@EntityScan(basePackages = "dnd.helper.domain.infrastructure")
public class AdventurerRepositoryServiceTestIT {

    @Autowired
    private AdventurerRepository adventurerRepository;


    @Test
    public void shouldPersistAdventurer() {
        Adventurer adventurer = FakeAdventurer.getAdventurerWithAllFields();
        adventurerRepository.saveAdventurer(adventurer);
    }
}

No i generalnie to jest super, po odpaleniu testu spring boot wstaje, załączają się beany i wykonuje się test. I tutaj pojawia się pierwszy problem - jak odpalę testy z palca, to działają, natomiast ja chciałbym je odpalać podczas budowania projektu mavenem, lub podczas odpalania głównej aplikacji spring bootowej.

Po szybkim researchu w sieci, odnalazłem plugin spring-boot-maven-plugin. No więc na szybkości dodałem sobie dwa wpisy do pomów - pierwszy do modułu application, drugi do modułu domain-infrastructure (klasa startująca aplikację springbootową jest w innym module niż repozytorium):

<profiles>
        <profile>
            <id>IT</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>${spring.boot.version}</version>
                        <executions>
                            <execution>
                                <id>pre-integration-test</id>
                                <goals>
                                    <goal>start</goal>
                                </goals>
                                <configuration>
                                    <skip>false</skip>
                                </configuration>
                            </execution>
                            <execution>
                                <id>post-integration-test</id>
                                <goals>
                                    <goal>stop</goal>
                                </goals>
                                <configuration>
                                    <skip>false</skip>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
<profiles>
        <profile>
            <id>IT</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <version>2.22.0</version>
                        <configuration>
                            <includes>
                                <include>**/*IT</include>
                            </includes>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

Na koniec odpalam clean install -P IT i okazuje się, że test nie został wykonany. Jestem na 99% przekonany, że to przez konfigurację w pomach - moduł application odpala springa podczas fazy wykonywania testów integracyjnych, ale te testy są skonfigurowane w innym module.

I tutaj pojawia się pytanie - w jaki sposób napisać to, żeby zadziałało? Od razu uprzedzę pytania - nie mogę przenieść spring-boot-maven-plugin do modułu domain-infrastructure, bo nie mam w nim zależności do application i plugin nie może odnaleźć klasy startującej springboota.

0

Wstaw zdjęcie architektury aplikacji.

0

-P IT a masz w ogóle taki profil? Co on załącza? Generalnie wygląda to sensownie co masz, przynajmniej ten drugi wpis.

0

Widok projektu z poziomu IDE:
project.PNG

Może łatwiej będzie, jak dodam link do githuba:

https://github.com/mswiac/DndHelper

Profil IT odpala spring-boot-maven-plugin z modułu application, oraz maven-failsafe-plugin z modułu domain-infrastructure.

0

Zrób moze osobny moduł na IT testy i wrzuć tam tylko dependencies do poma plus configuracje maven-failsafe-plugin i nic więcej. Bo teraz to nie jestem pewien czy np. repackage spring boota nie "psuje" ci czegoś ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1