Модульное тестирование параллельного кода - PullRequest
4 голосов
/ 10 января 2010

Мой проект выходного дня состоит из написания библиотеки кроссплатформенных примитивов параллелизма (критических разделов, мьютексов чтения / записи, взаимосвязанных целых чисел, событий и т. Д.), И мне было интересно, как выполнить модульное тестирование этого материала. Я понимаю, что тестирование параллельного кода само по себе сложно, но тестирование примитивов указанного кода не может быть таким сложным, не так ли?

Оказывается, это так сложно. По крайней мере, для меня это так.

Так как бы вы подошли к этому? В качестве примера, я даже не знаю, с чего начать тестирование критических разделов.

1 Ответ

6 голосов
/ 10 января 2010

Не думайте о модульных тестах, думайте о поведении, которое вы хотите указать. Например:

Given_an_unlocked_lock
    It_should_be_possible_to_take_it
Given_a_locked_lock
    It_should_not_be_possible_to_take_it_from_another_thread
    It_should_be_possible_take_it_from_the_same_thread
Given_a_locked_lock_when_unlocked
    It_should_be_possible_to_take_it
Given_a_locked_lock_when_owning_thread_terminates
    It_should_be_possible_to_take_it

Я думаю, это поможет вам определить, что делать. И да, возможно, вам нужен вспомогательный поток в ваших модульных тестах, чтобы это произошло. Возможно этот пример полезен.

...