Test/unit: A Time to Maintain, and a Time to Hand Off

Jun 20th, 2007

Back in 2000, after having purchased a brand spanking new Pickaxe book, I was trying to figure out what to do with this shiny new Ruby thing that I’d found. Being a very test infected developer, I had tried out the current de facto Ruby unit testing framework, RubyUnit, and wasn’t terribly impressed. In retrospect, some of the things I didn’t like about it were due to my nubishness, but it was enough to make my first Ruby project a testing framework, which I dubbed Lapidary.

I gave a presentation on testing at the first international Ruby conference in 2001, and pushed Lapidary while there. Lots of folks were intrigued, and Lapidary usage picked up quite a bit. Then in October of 2001, I was contacted by Masaki Suketa (RubyUnit’s maintainer) about Matz’ desire to include a unit testing package in the Ruby standard library. After various discussions back and forth, it was decided to rename Lapidary to test/unit, build a RubyUnit compatibility layer on top of it, and include it in the standard library for Ruby. Needless to say I was thrilled, and have been very happy to see something I created used by thousands upon thousands of Ruby programmers.

Fast forward to early 2007, i.e. a few months ago. test/unit has been languishing for years, and I’m just not motivated enough to knuckle down and move it in the direction I’d like to see it go. Then I read Ryan Tomayko’s post about Lesson #5 and it’s like a much-needed slap in the face. If you maintain or ever want to maintain an open source project and haven’t read the chapter from The Cathedral and the Bazaar that he references, go do it now: The Mail Must Get Through is incredibly insightful (and short). The gist: if you’re not maintaining your project, you owe it to the community to hand it off to someone who will.

Before I unveil test/unit’s future, I want to take a short side trip and say that I’ve been very excited to see the ideas and innovations coming out of the Ruby testing community. Calling it the “testing” community is a bit ironic, since some of the interesting stuff going on has been the work by the Behavior Driven Development folks to expunge testing vocabulary from the practice, but I can’t come up with a better moniker. Of course, it’s not just BDD, but also cool stuff like the various mocking libraries, higher level frameworks like WATIR and Selenium, and cool tools like autotest.

Which brings us right back to the big question: where’s test/unit going, and more importantly, who’s taking it there? Who first: in a lot of ways, I think of Ryan Davis as “Mr. Testy”. I mean, come on, he’s probably been doing automated testing work since before I was programming! I’ve watched his work with a lot of respect for a while now, and enjoyed hanging out with him at all the RubyConfs we’ve shared. The various tools of ZenTest are a cornucopia of helpful testing goodness, and in general I like his opinionated style of clean code.

After talking with Ryan at RailsConf, and giving myself an intervening month to make sure there would be no regrets, I’ve made the decision: Ryan Davis is now the test/unit maintainer. What does that mean for test/unit? First and most importantly, it’s going to get a lot more attention than it has for the past few years. Secondly… well, I can’t really say – I would suggest asking Ryan (and/or Eric Hodel, who I’m sure will be teaming up with Ryan as they have on so many other projects). I know some things I’d like to see happen, but will be very happy to just watch from afar as the little library I wrote to learn Ruby continues to mature in the hands of an engaged, very Ruby-savvy developer.

Writing test/unit and seeing it used so widely counts as the single greatest achievement I’ve yet had in my professional life. I wouldn’t trade the experience for the world. And don’t think I’m gone… I have a few other open source projects out there, and one or two more cooking, all in areas that itch a bit more for me these days.