Does it seem impossible to automatically UnitTest that one bit of code? Or, if it's possible, does it not seem cost-effective? Well, if you run plum out of ideas, there's always the "Don't Change The Code" Test:
- Pare down the amount of untestable code as much as possible.
- Take that small bit, and manually verify its results.
- Create a test assertion that has:
- Some mechanism to detect if anyone changes the code (string comparison, datestamp comparison, MD5Sum comparison, etc.)
- Any expectations you have for the code inside the "test failed" message.
Situations where this has successfully been used:
- SQL - For some evil database interactions, our DBAs create SQL appropriate for doing a task, and the programmers are generally told to avoid tinkering with it (sometimes the SQL has optimizations, other times it's just plain fragile). To keep anything from breaking, I paste the SQL in two places, one: the actual source, and two: the unit test assertion that fails with a message, "You should talk to so-and-so if you're going to change this SQL".
- HTML - A web-designer will sometimes craft a piece of HTML that looks right under all supported browsers, but can break in subtle ways. Instead of codifying those subtle ways into subtle unit tests, it might be better to just add a DontChangeTheCodeTest.
- JavaScript - Same deal. Just make sure you follow step #1 (pare down the amount of JavaScript as much as possible).
- NoTestsYetTest - For untested legacy code (I suppose "untested" and "legacy" are redundant).
Situations where this would probably be successful (if you've actually done this, and liked it, please move the items you have experience up to the previous list):
- GUIs, other graphics - Though, these might be better if you take a snapshot of the results of the code rather than the code itself.
- Security - If you have some code that has to be a certain way or else it's insecure, first try to figure out a SourceTest. If you can't figure that out, I guess a DontChangeTheCodeTest would be a reasonable stopgap.
- UnitTestingNonDeterministicCode
CategoryTesting