Щоб відповісти на другу частину вашого запитання: чи є щось глибше, що перешкоджає поширенню (принаймні деяких) тестів на декілька потоків?
Велика кількість коду працює лише під час запуску однієї нитки. Банально випадково створювати суперечки з ресурсами та тупики при написанні програм за умови, що вони будуть запускатись однопотоково. І це працює добре, оскільки більшість програм насправді працюють з однопотоковою ниткою. Паралелізм отримується за допомогою одночасного запуску декількох копій або різних програм (веб-скрипти - це один загальний приклад - багато користувачів, які звертаються до однієї сторінки, означають безліч копій скриптів для цієї сторінки, що працюють одночасно).
Уявіть простий клас "журнал у файл". Коли ви створюєте екземпляр, він відкриває файл для запису, коли ви звільняєте екземпляр, він закриває файл. Отже, перший тест створює екземпляр і починає виконувати тест. Другий тест робить те ж саме у другій нитці. І не вдається, оскільки друга інстанція не може отримати доступ до запису до файлу. Але якщо запустити один за одним, всі тести пройшли б.
Все це можна закодувати навколо, і простий приклад можна налаштувати на роботу. Але робити це, мабуть, не потрібно для початкової програми . Необхідність писати безпечний для потоків код лише для того, щоб можна було запускати тести одиниць, для багатьох людей нерозумно. Тож багатопотокові тести блоку повинні залишатися додатковими додатковими.