Development
Testing
Out of the box, the integration test suite runs a Docker database container
using TestContainers or memory database (H2
, SQLite
)
on Junit5 and Vert.x Junit 5 integration by
default.
Before test, it is required to generate database schema to Java class
by jOOQ
codegen.
Let’s begin
./gradlew generateJooq
./gradlew build test
Naming rule
[DB][Type::3 char][Topic]Test
In which:
-
DB
Database name: H2, Pg(PostgreSQL), MySQL, etc… -
Type
is Legacy(LeG
) or Reactive(ReA
) JDBC client -
Topic
is which topic for testing
Examples:
-
H2LeGRelTest
:H2
DatabaseLegacy
JDBCRelationship
TopicTest
-
H2ReANumericTest
:H2
DatabaseReactive
JDBCNumeric
TopicTest
-
PgReATemporalTest
:PostgreSQL
DatabaseReactive
JDBCtemporal-data-type
topicTest
How to write new test
To write new test or MCVE
(Minimal Complete Verifiable Example) for a specific Database and on which JDBC
client (legacy
or reactive
) type, please use jooqx-core
test fixtures. Also provide a suitable database driver
as a dependency.
-
Maven
<dependency>
<groupId>io.github.zero88</groupId>
<artifactId>jooqx-core</artifactId>
<version>2.0.0-SNAPSHOT</version>
<classifier>testFixtures</classifier>
<type>jar</type>
</dependency>
<!-- SQLite -->
<dependencies>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.34.0</version>
</dependency>
</dependencies>
-
Gradle
api(testFixtures("io.github.zero88:jooqx-core:2.0.0-SNAPSHOT"))
// sqlite
api("org.xerial:sqlite-jdbc:3.34.0") )
Then you can extend some based classes:
For legacy JDBC
, you can extend base class LegacyDBMemoryTest
or LegacyDBContainerTest
. For example:
class H2LeGSomethingTest extends LegacyDBMemoryTest<HikariCPDataSourceProvider>
implements H2DBProvider, H2SQLHelper, JDBCLegacyHikariProvider, UseJdbcErrorConverter {
@Test
void test_something(VertxTestContext ctx) {
}
}
For reactive JDBC
, you can extend base class ReactiveDBMemoryTest
or ReactiveDBContainerTest
class PgReASomethingTest extends ReactiveDBContainerTest<PgPool, PostgreSQLContainer<?>>
implements PgPoolProvider, PostgreSQLHelper, UsePgSQLErrorConverter {
@Test
void test_something(VertxTestContext ctx) {
}
}
This is typical test that you should to try
class PgReARxTest extends PgSQLReactiveTest<JDBCPool>
implements PgUseJooqType, JDBCReactiveProvider, UseJdbcErrorConverter, ReactiveRxHelper {
@Override
@BeforeEach
public void tearUp(Vertx vertx, VertxTestContext ctx) {
super.tearUp(vertx, ctx);
this.prepareDatabase(ctx, this, connOpt, "pg_data/book_author.sql");
}
@Test
void test_simple_rx(VertxTestContext ctx) {
final io.github.zero88.jooqx.integtest.pgsql.tables.Books table = schema().BOOKS;
Checkpoint cp = ctx.checkpoint();
rxPool(jooqx).rxExecute(jooqx.dsl().selectFrom(table), DSLAdapter.fetchJsonRecords(table)).subscribe(recs -> {
ctx.verify(() -> Assertions.assertEquals(7, recs.size()));
cp.flag();
}, ctx::failNow);
}
}
Please checkout more in integtest project to see in detail.