Upload
alan-parkinson
View
671
Download
0
Embed Size (px)
Citation preview
Test Data Builder Pattern
Alan ParkinsonCEO, Hindsight Software
@alan_parkinson
Tests ApplicationUnder Test
ApplicationDatabase
Mobile App Server
Drop and reload the database before
every test
Who has done this?
Database reloading is an Anti Pattern
Creating and maintaining SQL scripts is error prone and time consuming
Tests ApplicationUnder Test
ApplicationDatabase
Limitations of CI Scaling
Tests ApplicationUnder Test
ApplicationDatabase
What if we could generatetest data on demand?
Create test data on-demand
with the Test Data Builder Pattern
What is a Builder?
new UserBuilder()
an object that knows how to construct another object
User user = .build();
the object is complex to constructpublic class UserBuilder {
uses sensible default values
}
public User build() { return new User(name, password, email);}
private String name = ``charlie``;private String password = ``password``;private String email = ``[email protected]``;
Overriding sensible defaults
new UserBuilder()user = .build();.withName(``alan``).withPassword(``secret``)
Overriding sensible defaultspublic class UserBuilder {
}
public User build() { return new User(name, password, email);}
private String name = ``charlie``;private String password = ``password``;private String email = ``[email protected]``;
public UserBuilder withName(String name) { this.name = name; return this;}
What about the Test Data?
create remote data instead of an object
public class UserBuilder {
}
public UserDesc build() { /* Create data using SQL / REST API / UI? */ return new UserDesc(createdUserId);}
private String name = ``charlie``;private String password = ``password``;private String email = ``[email protected]``;public UserBuilder withName(String name) { this.name = name; return this;}
Don`t drop and reload the database
Generate and construct Test Data on-demand
Abstract data contruction complexity with the
Builder Pattern
Questions?
Alan ParkinsonCEO, Hindsight Software
@alan_parkinson