Skip to content

rene-anderes/dbUnitBurner5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dbUnitBurner - JUnit 5 Extension for DbUnit

Diese JUnit-Extension bietet die Möglichkeit mittels Annotations die für den Test notwendigen DB-Files (XML, CSV, XLS und JSON) anzugeben:

   @UsingDataSet(value = { "/prepare.json" })

Es können auch mehrere Files angegeben werden:

   @UsingDataSet(value = { "/Person.json", "Offer.json" })

Ebenfalls können das oder die Files angegeben werden mittels denen DBUnit die Datenbank nach der Test-Methode überprüft:

   @ShouldMatchDataSet(
        value = { "/expectedAfterDelete.json" },
        excludeColumns = { "INGREDIENT.ID" },
        orderBy = { "RECIPE.UUID", "INGREDIENT.ID" })

Wie das Beispiel zeigt können Sortierung und Ausnahmen für den Vergleich definiert werden. Format: [Tabellenname].[Spaltennamen]

Wenn gewünscht, kann auch ein SQL-Script angegeben werden, mittels dem die Tabelle(n) vor der Test-Methode gelöscht werden.

   @CleanupUsingScript(value = { "/sql/DeleteTableContentScript.sql" })

Es ist auch möglich, dass für das Laden von Testdaten ein (oder mehrere) SQl-Script(s) verwendet wird:

  @UsingDataSetScript(value = { "/sql/LoadTestdata.sql" })

Die SQL-Scripts sollten im UTF-8 Format (ohne BOM) vorliegen. Eine Zeile im SQL-Script entspricht einem SQL-Kommando. Ein Delimiter wie z.B. ';' ist nicht notwendig.

Es wird im Klassenpfad nach den entsprechenden Files gesucht. Als Basis für diese JUnit-Extension dient DBUnit

Die Annotierungen @UsingDataSet, @UsingDataSetScript und @CleanupUsingScript können sowohl für eine Methode als auch für eine Klasse gesetzt werden. Werden die Annotierungen auf der Klasse angebracht, so wird für jede Test-Methode die entsprechenden Files verwendet.

Beispiel JUnit-Test

@ExtendWith(DbUnitExtension.class)
@UsingDataSet(value = { prepare.json })
public class ProcessFacadeIT {

    /* Required for extension */
    private Connection connection = getConnection();

    @Test
    @ShouldMatchDataSet(value = { "ProcessAfterRemove.json" }
    public void shouldBeRemoveProcess() {
        ...
    }

}

Beispiel mit Spring

@ExtendWith(SpringExtension.class)
@ExtendWith(DbUnitExtension.class)
@ContextConfiguration(locations = { "classpath:/sample/application-context.xml" })
public class RecipeRepositoryIT {

    @Inject
    private RecipeRepository repository;
    @Inject @SuppressWarnings("unused")
    private DataSource datasource; /* Required for extension */
        
    @Test
    @UsingDataSet(value = { "/sample/prepare.json" })
    @ShouldMatchDataSet(
            value = { "/sample/prepare.json" },
            orderBy = { "RECIPE.UUID", "INGREDIENT.ID" })
    public void shouldBeFindAll() {
        Iterable<Recipe> recipes = repository.findAll();