Hello there,
Use Moq to control dependencies and do unit level testing. In your case, it seems like BClass2 depends on BClass1 and not on DClass. Yes there seems to be an indirect dependency on DClass too but as far as BClass2, it doesn't really care about that. Now, assuming you have an interface or abstract class for BClass1(which btw, you could use concrete types too), you can declare a private field of this interface/abstract class within BClass2, and have BClass2's constructor accept this interface/abstract class as a parameter and set this field. This is just one way of injecting dependency(constructor injection)-you could also use property injection or other methods. But they will all work fine as long as BClass2 depend on higher abstractions or is not tightly coupled with concrete type of BClass1. But then this will require concrete objects to be resolved and injected at run time-probably through some sort of IOC container. Once you have that in place, you can now create a mocked object using Moq and pass that in to create the object BClass2 depends on - in this case BClass1. Since your mocked object and BClass1 implements or inherits the same type, injecting the mocked object is good enough for BClass2-it won't know whether it's a real instance of BClass1 or one of it's siblings :)
This way, you have full control to unit test BClass2 and that is without even thinking about DClass.