A minimal Java framework for testing database operations with support for PostgreSQL, MySQL, and MongoDB using Testcontainers.
- Multi-database support: PostgreSQL, MySQL, MongoDB
- Transaction management: Automatic rollback for test isolation
- Test data seeding: DBUnit integration for test data setup
- Database migrations: Flyway support for schema management
- Microservice integration: REST API testing with database validation
- Parallel execution: Thread-safe test execution
- Container management: Testcontainers for isolated test environments
public class MyDatabaseTest extends BaseDbTest {
@Override
protected DatabaseType getDatabaseType() {
return DatabaseType.POSTGRESQL;
}
@Override
protected String getTestDataPath() {
return "test-data/my-data.xml";
}
@Test
public void testCrudOperations() throws Exception {
UserDao dao = new UserDao(connection);
User user = dao.create(new User("Test", "test@example.com"));
assertNotNull(user.getId());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<users id="1" name="Test User" email="test@example.com"/>
</dataset>
With Docker (Full Framework):
mvn test
Without Docker (In-Memory Testing):
mvn test -Dtest=InMemoryUserTest
[TestNG Tests] --> [BaseDbTest] --> [DatabaseContainer] --> [Database]
| |
[TestDataManager] --> [DBUnit]
|
[FlywayMigrator] --> [Migrations]
- BaseDbTest: Base class with setup/teardown and transaction management
- DatabaseContainer: Testcontainers wrapper for different DB types
- TestDataManager: DBUnit integration for test data seeding/cleanup
- UserDao: Example DAO demonstrating CRUD operations
- PostgreSQLUserTest: Basic CRUD operations
- MySQLUserTest: Transaction rollback testing
- MicroserviceIntegrationTest: API + database integration
- ParallelExecutionTest: Concurrent execution testing
- InMemoryUserTest: H2 in-memory testing (no Docker required)
Required for Testcontainers:
- Install Docker Desktop: https://www.docker.com/products/docker-desktop/
- Start Docker Desktop
- Verify:
docker --version
Alternative (No Docker):
- Use
InMemoryUserTest
with H2 database - Run:
mvn test -Dtest=InMemoryUserTest
Tests run with automatic:
- Database container startup/shutdown
- Schema migration via Flyway
- Test data seeding via DBUnit
- Transaction rollback after each test
- Parallel execution (4 threads)