Effective Test Driven Database Development
Download
Report
Transcript Effective Test Driven Database Development
Effective Test Driven
Database Development
Gojko Adzic
http://gojko.net
[email protected]
twitter.com/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/dbfit
http://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.info
http://gojko.net