Singletons are death to testability. They cause tight
coupling between different parts of your application. If you must have them,
then a common workaround is to add a Reset() or set() method to the Singleton
so that test classes are able to change the instance that is being used, or to
reset it to null before each test. If you're not using an IOC Container to
manage the liftetime of your objects, then the only way to test them
effectively is to hack in back doors to your beautifully crafted Singleton
pattern and then add a bunch of comments telling developers "don't call
this outside of test classes". It's crap. It stinks. Don't do it.