Unit Tests Suck, But They’re So Important

I’ve been working on a little Mac application in my limited spare time. The component I’ve been tackling lately involves conversion between Markdown text and an NSAttributedString. There’s no good way to test the process, but what I’ve settled on is the following:

  1. Convert from Markdown to NSAttributedString
  2. Convert from NSAttributedString back to Markdown
  3. Convert from Markdown to HTML
  4. Convert the original Markdown to HTML
  5. Compare the result of step 3 and step 4

Normally, I hate writing unit tests. Even with a firm grasp of cyclometric complexity, it’s still a pain to figure out how many tests you need to write and what each test should actually test. But in this case, John Gruber already put together a pretty decent suite of tests for Markdown. All I need do is run each source file through my conversion test.

Right now, out of 19 tests, only 12 are failing. After I add support for HTML encoding unicode characters (which isn’t really necessary if you declare your content to be in UTF-8, but nevertheless) the rest of the errors relate to whitespace wrapping in HTML. I’m going to try adding some sort of HTML tidying to the test to see if I can losslessly massage the HTML to be more similar.

Update: After adding support for encoding non-ascii characters and piping the HTML through tidy, all tests pass.