Жесткий! В моих (C ++) модульных тестах я разбил это на несколько категорий в соответствии с используемым шаблоном параллелизма:
- Единичные тесты для классов, которые работают в одном потоке и не являются
- Модульные тесты для Объекты монитора (те, которые выполняют синхронизированные методы в потоке управления вызывающих), которые выставляют синхронизированный публичный API - - создавать экземпляры нескольких потоков, реализующих API. Постройте сценарии, в которых выполняются внутренние условия пассивного объекта. Включите один более длительный тест, который в основном ударяет из него из нескольких потоков в течение длительного периода времени.
- Единичные тесты для Активных объектов (те, которые инкапсулируют собственный поток или потоки управления) - аналогично # 2, приведенному выше, с вариации в зависимости от дизайна класса. Открытый API может блокировать или не блокировать, вызывающие могут получать фьючерсы, данные могут поступать в очереди или должны быть удалены. Здесь возможно много комбинаций; белый ящик.
В стороне:
Во внутреннем обучении разработчиков, которое я делаю, я преподаю Столпы параллелизма и эти два шаблона в качестве основной основы для размышлений и разложения проблем параллелизма. Там, очевидно, более продвинутые концепции, но я обнаружил, что этот набор основ помогает инженерам выходить из супа. Это также приводит к коду, который более подвержен тестированию, как описано выше.
задан tatsuhirosatou 22 February 2009 в 18:06
поделиться