Regardez, il n'y a pas de moyen facile de le faire. Je suis en train de travailler sur un projet qui est par nature multithread. Événements à venir dans le système d'exploitation et je dois les traiter simultanément.
La façon la plus simple de traiter avec les tests complexes, multithhreaded le code de l'application est la suivante: Si c'est trop complexe pour tester, vous le faites mal. Si vous avez une seule instance qui a plusieurs threads en agissant sur elle, et vous ne pouvez pas tester les situations où ces threads étape tous les uns les autres, votre conception doit être refait. De son à la fois aussi simple et aussi complexe que cela.
Il existe de nombreuses façons de programme pour le multithreading, qui évite les threads en cours d'exécution à travers les instances en même temps. Le plus simple est de faire tous vos objets immuables. Bien sûr, ce n'est généralement pas possible. Donc, vous devez identifier les endroits dans votre conception où les threads interract avec la même instance et de réduire le nombre de ces lieux. En faisant cela, vous isoler quelques classes où le multithreading en fait se produit, réduire la complexité globale de test de votre système.
Mais vous devez comprendre que même en faisant cela, vous ne pouvez toujours pas de test de chaque situation où les deux fils à l'étape uns sur les autres. Pour ce faire, vous devez exécuter deux threads simultanément dans le même test, puis de contrôler exactement ce que les lignes qu'ils sont en cours d'exécution à un moment donné. Le meilleur que vous pouvez faire est de simuler cette situation. Mais cela peut vous obliger à code spécifiquement pour les tests, et c'est au mieux un demi-pas vers une vraie solution.
Probablement la meilleure façon de tester le code pour les problèmes de threading est par le biais de l'analyse statique du code. Si votre fileté code ne suit pas un ensemble fini de thread-safe modèles, alors vous pourriez avoir un problème. Je crois que l'Analyse de Code dans VS ne contenir une certaine connaissance de l'enfilage, mais probablement pas beaucoup.
Regardez, comme les choses se présentent actuellement (et probablement restera pendant un bon moment à venir), le meilleur moyen pour tester les applications multithread est de réduire la complexité de threaded code autant que possible. Minimiser les zones où les threads interagir, test du mieux que possible, et l'utilisation de l'analyse de code pour identifier les zones de danger.