effective test driven database development gojko adzic [email protected] twitter.com/gojkoadzic

22
Effective Test Driven Database Development Gojko Adzic http://gojko.net [email protected] twitter.com/gojkoadzic

Upload: bernardo-bush

Post on 16-Dec-2015

224 views

Category:

Documents


1 download

TRANSCRIPT

Effective Test Driven Database Development

Gojko Adzichttp://gojko.net

[email protected]/gojkoadzic

Database somehow always sticks out

Lots of teams struggle with Database testing...

Bad tools Inherently hard to test Changes are persistent Attitude of DB Specialists

Full build with all integration tests is the only thing you

can really trust

...but it is not the most practical thing to run all the time

DB management

Dedicated instances for developers are best One development DB can also work ok Build + n*integrations must always be separate

Don't count on the DB being empty

Tests will be much more effective if they can ignore trash

Generate the glue code and bring the two worlds closer together

Don't fight against database features, use them!

Run tests in transactions!

Isolate non-transactional tests and run them overnight

Do not depend on the order of test execution

Prepare everything you need for an isolated test

Prepare everything you need...

Known state of small development databases Link to files Trash and restore DB

Start with a clean DB and Load data with DbUnit

Set up data for a specific test and roll back later Ideally don't suppose that the DB is empty

ORM is not magic!

DBFIT: Test Driven DB Development Made Easy

FIT+FitNesse+DB Fixtures

http://sourceforge.net/projects/dbfithttp://fitnesse.info/dbfit

Why DbFit?

Manipulate data in a relational model Provides all the plumbing

Transaction management Smart features based on meta-data Parameter mapping “wizards” for regression tests

Because it runs inside FitNesse, already integrated with a lot of other tools/libraries

Use DbFit to:

Write and execute DB Unit tests Prepare/verify Java or .NET integration tests

.NET: Sql Server, Oracle, (DB2) Java: Mysql, Oracle, (DB2, SQL Server, Derby)

Simple commands

Execute procedure Query Execute Insert Update

FitNesse symbols directly mapped to bind variables

Retrieve auto-generated keys and use them directly

<< and >> available in Java as well Already mapped to bind variables

Advanced features

Inspect queries, tables or procs to automatically generate test tables and regression tests

Store and compare queries Standalone mode for full control

DbFit 2.0

Upcoming release in April Support for command timeouts Better architecture, more flexible for different test

runners Integration with Trinidad Support for Db2, Derby, HSQL

Image credits

http://www.flickr.com/photos/seantubridy/ http://www.flickr.com/photos/aasta/ http://www.flickr.com/photos/guiniveve/ http://flickr.com/photos/annevoi/ http://www.flickr.com/photos/chaspope http://www.flickr.com/photos/massenpunkt http://www.flickr.com/photos/night_heron http://www.flickr.com/photos/80336234@N00

www.acceptancetesting.infohttp://gojko.net