Поскольку программное обеспечение становится все более и более параллельным, как вы справляетесь с тестированием основного поведения типа с помощью своих модульных тестов (а не с параллельным поведением, только с основным поведением)?
В старые добрые времена у вас был тип, вы его назвали, и вы проверили, что он вернул и/или какие другие вещи он назвал.
В настоящее время вы вызываете метод, и фактическая работа должна планироваться для запуска в следующем доступном потоке; вы не знаете, когда это произойдет, и вызовите другие вещи - и что еще, эти другие вещи могут быть одновременно.
Как вы справляетесь с этим? Вы абстрагируетесь/вводите параллельный планировщик (например, абстрактно параллельную библиотеку задач и предоставляете фальшивку/макет в модульных тестах)?
Какие ресурсы вам удалось найти?
Edit
Я отредактировал вопрос, чтобы подчеркнуть тестирование нормального поведения типа (игнорируя любой параллельный механизм, используемый для использования многоядерных, например TPL)