Learning a new programming language historically starts off with the classic “Hello World” example. I've probably written a variation on that a bazillion times. From there you take more steps into advanced parts of the language. If you are smart, you save your example programs to refer back to them later. But there's a better way. And that better way is to write test cases that exercise the capabilities of the language you are trying to learn. This also works for new libraries within a language you are trying to learn.

The advantages of writing test cases are plentiful. It gets you writing actual code which helps you remember, they can be usually be run easily, they serve as an extra source of documentation about what you are trying to do (e.g. “How do I use gsub again? Oh yeah, it's in that string test I wrote?”) and finally writing tests is fun.

An Example

After ignoring it for way too long, I recently started trying out the Yahoo! User Interface Library. It's a JavaScript library with scads of useful utilities for buidling web applications. So, I pulled up the documentation and started writing a tests based on what's documented. Since it's JavaScript, I used JsUnit since I'm used to JUnit on the Java side of things. And voila we have our first test:

<html>
    <head>
    <title>Test Yahoo</title>
    <script type="text/javascript" 
        src="jsUnitCore.js"></script>
    <script type="text/javascript" 
        src="yahoo.js"></script>
    <script type="text/javascript">
    <!--
        function testIsArray() {
            assertTrue(YAHOO.lang.isArray([1,2]));
        }
    //-->
    </script>
</head>
<body>
    A test document.
</body>
</html>

(I know it's very simple but I just wanted to get a feel for the first method in the global library and type it so my brain remembered it.)

So, now I drop the test file into my test runner and here we have the results:

It's all green!

Can't you just feel your brain expanding with the possibilities?