2010-01-10 6 views
4

Mon projet de week-end consiste à écrire une bibliothèque de primitives concurrentes multiplateformes (sections critiques, mutex en lecture/écriture, entiers imbriqués, événements, etc.) et je me demandais comment tester cet élément. Je me rends compte que tester le code concurrent est difficile en soi, mais tester les primitives de ce code ne pourrait pas être si difficile, n'est-ce pas?Code de test simultané des unités

Il s'avère que c'est si difficile. Au moins pour moi ça l'est.

Alors, comment voulez-vous aborder cette question? À titre d'exemple, je ne sais même pas par où commencer pour tester les sections critiques.

+4

Vous allez écrire une bibliothèque de primitives de concurrence croisée en une fin de semaine. Impressionnant! –

+0

Haha c'est l'objectif! Il y aura toujours un autre week-end à combler si je ne peux pas le faire. L'apprentissage constant est le nom du jeu. –

Répondre

6

Ne pensez pas aux tests unitaires, pensez au comportement que vous souhaitez spécifier. Par exemple:

Given_an_unlocked_lock 
    It_should_be_possible_to_take_it 
Given_a_locked_locked 
    It_should_not_be_possible_to_take_it_from_another_thread 
    It_should_be_possible_take_it_from_the_same_thread 
Given_a_locked_locked_when_unlocked 
    It_should_be_possible_to_take_it 
Given_a_locked_locked_when_owning_thread_terminates 
    It_should_be_possible_to_take_it 

Je pense que cela vous aidera à identifier ce qu'il faut faire. Et oui probablement vous avez besoin d'un fil d'aide dans vos tests unitaires pour y arriver. Peut-être this example est utile.

+0

Comment devrais-je tester que je "ne peux pas" obtenir un verrou, car il se verrouillerait juste jusqu'à ce que je le puisse. –

+0

Veuillez regarder le lien que j'ai fourni dans la réponse, en particulier la classe 'Given_a_locked_MutexWrapper' – Cellfish