Global state (and singletons) is a big problem for testing because the global state cannot be controlled by the tests.
Dependency injection enforces the order of initialization at compile time. No magic behind the scene, that singletons get initialized and method talk to each other without the programmer knowing it.
The constructor should have the objects you need as arguments. Don't use locator (object through which you get the object you actually need). In a test like this it is a lot easier to construct! You can just construct the objects needed. You don't need to construct the locator first and then reach in the locator to get the object you actually need.--> This is law of demeter. Don't pass around objects you don't need. You don't want to know about objects you don't need.DO this:public House(Door ......