The 2009 Advent calendar situation

Assume that you have some important object that performs some important task. It may look something like this:

    1:      public class ImportantObject
   2:      {
   3:          public void ImportantMethod()
   4:          {
   5:              // Do things.
   6:          }
   7:      }

You've done everything right and created this object using BDD/TDD but one day everything changes. You need to make this object thread safe. The straight forward way to do this would look like this:

    1:      public class ImportantObject
   2:      {
   3:          private readonly object _lock = new object();
   4:   
   5:          public void ImportantMethod()
   6:          {
   7:              lock(_lock)
   8:              {
   9:                  // Do things.
  10:              }
  11:          }
  12:      }

But that is tricky to drive using specifications/tests, right? So over the next 24 days I'll show you a few ways to do this and by Christmas eve we should have something nice that works. And I'll be using xUnit.Net to write the specs/tests.