JUnit 5

See quick start(facet) for snippets of Table Facet.

Importing
import org.junit.jupiter.api.Nested;

import guru.mikelue.foxglove.annotation.DataGeneratorSource;
import guru.mikelue.foxglove.annotation.GenData;
import guru.mikelue.foxglove.annotation.TableFacetsSource;
import guru.mikelue.foxglove.functional.TableFacetProvider;
import guru.mikelue.foxglove.jdbc.JdbcTableFacet;

Default DataGenerator
@DataGeneratorSource
DataGenerator<?> defaultDataGenerator()
{
    return new JdbcDataGenerator(getDataSource());
}

Basic usage

By fields
// Use direct object of TableFacet
@TableFacetsSource
TableFacet carsOfRed = JdbcTableFacet.builder(TABLE_CAR)
    .column("cr_color").fixed("red")
    .numberOfRows(RANDOM_ROWS).build();

// Use provider of TableFacet
@TableFacetsSource
TableFacetProvider<TableFacet> membersInTaipei = () ->
    JdbcTableFacet.builder(TABLE_MEMBER)
        .column("mb_address").fixed("Taipei, Taiwan 1234 Main St")
        .numberOfRows(RANDOM_ROWS).build();

@Test
@GenData(facetsNames = { "carsOfRed", "membersInTaipei" })
void byFields()
{
    /* ... */
}
Warning
  • Since JdbcTableFacet is not reusable, you should not use @TableFacetSource field when you are using @TestInstance(Lifecycle.PER_CLASS).

  • Use TableFacetProvider for @TableFacetSource fields while you are using @TestInstance(Lifecycle.PER_CLASS)

By methods
@TableFacetsSource
TableFacet carsOfBlue()
{
    return JdbcTableFacet.builder(TABLE_CAR)
        .column("cr_color").fixed("blue")
        .numberOfRows(RANDOM_ROWS)
        .build();
}

@TableFacetsSource
TableFacet membersInNewYork()
{
    return JdbcTableFacet.builder(TABLE_MEMBER)
        .column("mb_address").fixed("New York, NY 1234 Main St")
        .numberOfRows(RANDOM_ROWS)
        .build();
}

@Test
@GenData(facetsNames = { "carsOfBlue", "membersInNewYork" })
void byMethods()
{
    /* ... */
}
By provider class
static class CarsInSilver implements TableFacetProvider<TableFacet> {
    @Override
    public TableFacet getOne()
    {
        return JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_color").fixed("silver")
            .numberOfRows(RANDOM_ROWS)
            .build();
    }
}

@Test
@GenData({ CarsInSilver.class })
void byProviderClass()
{
    /* ... */
}
By named sources
@TableFacetsSource("carsOfRainbow")
TableFacet carsOfSomeColors = JdbcTableFacet.builder(TABLE_CAR)
        .column("cr_color")
            .roundRobin(
                "Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"
            )
        .numberOfRows(RANDOM_ROWS)
        .build();
@Test
@GenData(facetsNames = { "carsOfRainbow" })
void byTableFacetWithName()
{
    /* ... */
}

List, Stream, or array of TableFacets

By array
@TableFacetsSource
TableFacet[] carsOfArray()
{
    return new TableFacet[] {
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_color").fixed("coral")
            .numberOfRows(RANDOM_ROWS)
            .build(),
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_model").fixed("GK-001")
            .numberOfRows(RANDOM_ROWS)
            .build()
    };
}
@Test
@GenData(facetsNames = { "carsOfArray" })
void byArrayOfTableFacet()
{
    /* ... */
}
By list
@TableFacetsSource
List<TableFacet> carsOfList()
{
    return List.of(
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_color").fixed("Crimson")
            .numberOfRows(RANDOM_ROWS)
            .build(),
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_model").fixed("LK-002")
            .numberOfRows(RANDOM_ROWS)
            .build()
    );
}
@Test
@GenData(facetsNames = { "carsOfList" })
void byListOfTableFacet()
{
    /* ... */
}
By stream
@TableFacetsSource
Stream<TableFacet> carsOfStream()
{
    return Stream.of(
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_color").fixed("BlueViolet")
            .numberOfRows(RANDOM_ROWS)
            .build(),
        JdbcTableFacet.builder(TABLE_CAR)
            .column("cr_model").fixed("GN-003")
            .numberOfRows(RANDOM_ROWS)
            .build()
    );
}
@Test
@GenData(facetsNames = { "carsOfStream" })
void byStreamOfTableFacet()
{
    /* ... */
}

References: List, Stream

Nested test class

Use sources of enclosing class
@TableFacetsSource
TableFacet carsOfGreen = JdbcTableFacet.builder(TABLE_CAR)
    .column("cr_color").fixed("green")
    .numberOfRows(RANDOM_ROWS).build();

@Nested
class NestedTest {
    @Test
    @GenData(facetsNames = { "carsOfGreen" })
    void nestedByFields()
    {
        assertNumberOfRows(
            TABLE_CAR,
            "cr_color = 'green'"
        )
            .isEqualTo(RANDOM_ROWS);
    }
}

References: Nested Tests