Discussed such things at work. My opinion is that Unit Test is that it tests a small block, where its dependencies are mocks or stubs so that you can connect some givens to state your expectations.
Of course, this leads to when I really implement my interfaces and, more importantly, how do I know that this damn job works. This is where integration tests or BDD tests appear. When I come to write some feature or story, I try to run a BDD test that flows through the system, these tests should use all real implementations up to any external boundaries. I am trying to use the same IoC scheme in tests as in a real application. Once this test has been highlighted and it turns red, you can start diving into your unit tests and put things together. When you finish the BDD test should pass.
The good thing about BDD tests is that you can modify certain parts of the internal components, but until you change your requirements, the test remains virtually unchanged.
I play with StoryQ for BDD tests and find it easy to use.
source share