Test-Driven Development posits that all behaviors in a system should be specified in tests. Sometimes this appears to be challenging either because the system has design flaws that make it hard to test, or because the technique needed to create the tests is not immediately clear. Sometimes it is a bit of both.
At our blog Sustainable TDD, Amir Kolsky and I have outlined the techniques needed for writing TDD-style tests for code that supports mutli-threaded access.
Part 1: http://www.sustainabletdd.com/2014/10/tdd-and-asychronous-behavior-part-1.html
Part 2: http://www.sustainabletdd.com/2014/10/tdd-and-asychronous-behavior-part-2.html
Please provide comments in the blogs themselves.