Singletons are the essence of the shared state. In order to ensure your tests run in an isolated environment, it would be best to avoid them. If a singleton is required (for example, Logging, Data Context, and so on), most Dependency Injection frameworks allow for the substitution of a non-singleton class as a single instance, which gives the functionality and flexibility of effectively having a singleton. For production code, this allows you to control the scope of the singleton instance.