Indledning

Dette dokument beskriver en testvejledning for prøvebestillings indlæseren. Det forudsættes at projektet er bygget og installeret, og med denne vejledning kan man således afvikle tests og derved kontrollere robustheden.

Prøvebestillings indlæseren benytter i vid udstrækning docker til test, for at kunne teste så vidt muligt med de rigtige afhængigheder.

Det overordnede setup er beskrevet i NSP Continuous Integration & Delivery, og det er herved muligt at starte en specifik prøvebestillings indlæser med lokalt kørende database således at hele flowet kan afprøves lokalt.

Unittest

Der anvendes unittests i prøvebestillings indlæseren ved brug af JUnit.

Prøvebestillings indlæserens unittest-setup er specielt på to punkter, i det der benyttes mocks for at kunne teste Camel, samt at der benyttes TestContainers, således at unittests kan ramme en rigtig lokalt kørende mariadb database  og SFTP server kørende i docker (https://www.testcontainers.org).

Unittests kan køres ved at eksekvere

mvn test


Mocking i Camel

I det Camel kører asynkront, er det nødvendigt for unittests at vide, hvornår Camel er færdig med at indlæse en fil, hvis testen skal vide, hvornår den kan kontrollere, om det gik som forventet. Dette gøres i yder indlæseren, i klassen BaseMockTest, hvor Camel-routen mockes ved at tilføje et sidste MockEndpoint, som en test kan vente på.

Hvis ikke der benyttes mocks til Camel kan man være nødsaget til at indsætte waits, hvilket gør testeksekveringen langsommere, samt kan være afhængig af eksekveringsmaskinens computerkraft.

Unittests med en kørende MariaDb

Idet prøvebestillings indlæseren selv migrerer databaseskemaet (via Flyway), samt i overensstemmelse med NSP husregler ikke benytter ORM som Hibernate, er det blevet godkendt at unittests selv starter en mariadb database via docker, og tester ved brug af den.

TestContainers er et java bibliotek som tillader programmatisk instruering af docker starter op, og herved starter en ny tom mariadb container op, som applikationen kan køre databasemigreringer mod, og herefter benytte i alle unittests. 

For eksempel se https://svn.nspop.dk/svn/importers/proevebestillingsindlaeser/trunk/src/test/java/dk/nsi/sdm/proevebestilling/BaseTest.java klassen i prøvebestillings indlæser-projektet.

Codecoverage

Efter afvikling af unit-tests genereres en testrapport med Maven-plugin’et JaCoCo. Rapporten kan ses ved at åbne følgende fil i en browser target/site/jacoco/index.html.

Rapporten dækker selve prøvebestillings indlæseren. Codecoverage er minimum 79%. Der henvises til JaCoCo testrapporten for yderligere information vedr. coverage. Bemærk at JaCoCo ikke kan verificere linjer, der kaster exceptions, og at sådanne linjer altid vil stå som missed.

Pr. 8. februar 2021 er coverage 90%:

Performancetest

Prøvebestillings indlæseren indeholder ikke en automatiseret testsuite beregnet til performancetest. Det anbefales dog at der udføres en manuel performancetest i forbindelse med udvikling, med prøvebestillings filer af omtrent samme størrelse og kompleksitet som de rigtige indlæsningsfiler. 

En sådan rudimentær performancetest er ment til at afdække eventuelle flaskehalse som kan blive optimeret før release, samt også give en idé til hvor lang tid yder indlæseren vil skulle bruge for at indlæse de typiske filer der modtages.