Maybe I'm imagining here, but "interfaces everywhere" seems like a Code Smell to me. One way to help preserve security while not forcing every class to have an interface would be to allow mocking of arbitrary classes as long as the mocking class is in the same assembly as the class being mocked. Of course, there is alwalways ILMerge...