An Apology & an Explanation

Nathaniel Talbott

Let me apologize for any confusion I've created by releasing another Ruby unit testing framework to the world. Of course, I'm only apologizing for the confusion, not for creating Lapidary :-) The main reason I've developed Lapidary is because I wanted a unit testing framework based on sunit instead of junit. One of the reasons I love Ruby is its similiarity to Smalltalk, and the runit design, being copied from junit, did not strike me as being particularly fit to the Ruby paradigm. I also wanted to learn more about Ruby, and writing a unit testing framework seemed like a good way to do it.

Rather than just copying sunit, I took it even one step further by going back to Kent Beck's original paper about the motivations behind the sunit design, and tried to capture those motivations as opposed to their implementation, yielding something that feels like Ruby instead of Smalltalk, but has a well-thought out design that better matches Ruby's Smalltalk-like paradigm.

The final thing that bugged me about runit was the lack of unit tests. While it is difficult to write unit tests for a unit testing framework, I think they are essential to have. It seems to defeat the purpose of a unit testing framework if you don't know through unit testing that it works as advertised. Thus, I have, to the best of my ability, unit tested every aspect of the framework, with the sole exception of the UI. It probably needs it to, but I haven't figured out how to do it yet (any one want to run with that one?)

Will Lapidary supercede runit? While I wouldn't mind seeing that happen (not because I think runit is evil, but because I believe Lapidary will help people write better unit tests and more unit tests), I don't really care if it does. I'll be using Lapidary when I code in Ruby, and I want to give others the option of doing the same, and that's all that really matters. No offense is meant and I hope no offense will be taken by the author(s) of runit; my decisions have been completely practical and not at all personal. At this point, I'll let the Ruby community decide whether Lapidary has enough merit to begin using it exclusively (or at all).

Now, let's go out and make Ruby rule the world!

Back to the Lapidary documentation