Database Unit Testing - Test Data Creation
Jakob Jenkov |
Some applications need extensive test data inserted into the database in order to properly test the applications domain logic. Setting up all this data in each and every unit test can be quite cumbersome.
Instead you could create a "test case" object, which is capable of setting up data for simple test cases. For instance, inserting a customer in the database, with N products selected etc.
Here is a simple example of such a TestData
class. It is just a standard Java class - nothing
secret about it.
public class TestData { public void insertCustomer() { // insert customer logic. } public void insertProducts() { // insert products for customer } pubic void setupCustomerSituation() { // insert customer with several products, in // various configurations. } //etc. }
Exactly what methods you will put in your own TestData
class, depends on the data used by
your application.
Also, you may want some of the methods to take parameters, rather than e.g. always inserting a hardcoded customer, or product etc.
Using the TestData Class
Once you have such a TestData
class, you can use and reuse it in your unit tests.
The TestData
class can contain all kinds of business wise complex test data setups,
which are then easy to setup in the database, once they have been programmed once.
Here is a very simple usage example:
@Test public void testIt() { TestData testData = getTestDataInstance(); // get this from somewhere... testData.setupCustomerSituation(); MyOperation operation = new MyOperation(); operation.doIt(); assertTrue(...); //etc. }
Advantages of a TestData Class
The two main advantages of a TestData class are:
- Test data creation can be reused.
- The TestData class can be documented, so each test case can explain what data (business situation) it sets up.
Tweet | |
Jakob Jenkov |