test data builder pattern

15
Test Data Builder Pattern Alan Parkinson CEO, Hindsight Software @alan_parkinson

Upload: alan-parkinson

Post on 17-Feb-2017

661 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Test Data Builder Pattern

Test Data Builder Pattern

Alan ParkinsonCEO, Hindsight Software

@alan_parkinson

Page 2: Test Data Builder Pattern

Tests ApplicationUnder Test

ApplicationDatabase

Mobile App Server

Drop and reload the database before

every test

Page 3: Test Data Builder Pattern

Who has done this?

Page 4: Test Data Builder Pattern

Database reloading is an Anti Pattern

Creating and maintaining SQL scripts is error prone and time consuming

Page 5: Test Data Builder Pattern

Tests ApplicationUnder Test

ApplicationDatabase

Limitations of CI Scaling

Page 6: Test Data Builder Pattern

Tests ApplicationUnder Test

ApplicationDatabase

What if we could generatetest data on demand?

Page 7: Test Data Builder Pattern

Create test data on-demand

with the Test Data Builder Pattern

Page 8: Test Data Builder Pattern

What is a Builder?

new UserBuilder()

an object that knows how to construct another object

User user = .build();

Page 9: Test Data Builder Pattern

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]``;

Page 10: Test Data Builder Pattern

Overriding sensible defaults

new UserBuilder()user = .build();.withName(``alan``).withPassword(``secret``)

Page 11: Test Data Builder Pattern

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;}

Page 12: Test Data Builder Pattern

What about the Test Data?

create remote data instead of an object

Page 13: Test Data Builder Pattern

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;}

Page 14: Test Data Builder Pattern

Don`t drop and reload the database

Generate and construct Test Data on-demand

Abstract data contruction complexity with the

Builder Pattern

Page 15: Test Data Builder Pattern

Questions?

Alan ParkinsonCEO, Hindsight Software

@alan_parkinson