Test Data Builder
Pattern
Alan Parkinson
CEO, Hindsight Software
@alan_parkinson
Tests
Application
Under Test
Application
Database
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
Application
Under Test
Application
Database
Limitations of CI Scaling
Tests
Application
Under Test
Application
Database
What if we could generate
test 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
construct
public 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 = ``charlie@behave.pro``;
Overriding sensible
defaults
new UserBuilder()user = .build();
.withName(``alan
``).withPassword(``secr
et``)
Overriding sensible defaults
public class UserBuilder {
}
public User build() {
return new User(name, password, email);
}
private String name = ``charlie``;
private String password = ``password``;
private String email = ``charlie@behave.pro``;
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 = ``charlie@behave.pro``;
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 Parkinson
CEO, Hindsight Software
@alan_parkinson

Test Data Builder Pattern