I’ve been a big fan of SubSonic for a while now, as you can probably tell from my last post and I’ve been helping out with the project a lot more over the last few months. Yesterday all the hard work paid off and we’ve released version 3.0.0.4 to the world, see Rob’s blog for more details of what’s included. There’s a mass of bug fixes but there’s also some things I’ve been working on behind the scenes to reduce the friction for everyone involved in the project and make it easier for future releases to be more regular and high quality.

Making testing less painful

The SubSonic core is pretty well covered with tests but they were almost all integration tests. In fact to run them you needed to install and configure three databases (SQL2005, SQL2008 and MySQL) and the tests then took over 6 minutes to run. So last month I dived in and reworked a large chunk of them into unit tests. The unit tests run in 6 seconds now and cover about 35% of the SubSonic core, not perfect but it’s heading in the right direction and combined with a continuous integration server makes it a lot easier to work on the code quickly and safely.

Continuous integration, like trust but with a blame button …

I really like having a continuous integration server that builds and tests code automatically whenever a change is checked into source control. Fortunately for us the nice people at teamcity.codebetter.com provide TeamCity server hosting for open source projects and they’re now hosting SubSonic. Right now we’re only running our unit tests but the plan is to also have all our integration tests run on checkin too. If you want to keep an eye on the SubSonic builds and tests you cancheck the rss feed. Special thanks to Kyle Baley who has been unswervingly patient and helpful getting everything set up.

What’s coming in 3.1

3.0.0.4 is a maintenance release, fixes a bunch of bugs and sets the project up for the future. So work’s now starting on version 3.1 which is planned for release on the 22nd of May and should include the following features:

  • Oracle support
  • Medium Trust support
  • Automatic foreign keys for SimpleRepository
  • More/better/smarter attributes forSimpleRepository