Java - стратегии модульного тестирования параллелизма / блокировки очереди - PullRequest
5 голосов
/ 11 января 2012

У меня есть программа, которая работает, вытаскивает рабочие элементы из очереди блокировки и работает с ними одновременно.Я понимаю, что это ОЧЕНЬ дурное описание, но может ли кто-нибудь предложить стратегию / идеи для модульного тестирования относительно того, что тестировать?

Ответы [ 3 ]

2 голосов
/ 11 января 2012

Вам нужно спроектировать его для тестирования.

Итак, конкретные предложения:

  • Убедитесь, что вы можете поместить тестовые классы или макеты в очередь
  • Запишите некоторые ранние макеты, чтобы они длились дольше, и убедитесь, что они не первые завершенные (демонстрирует параллелизм)
  • Убедитесь, что размер вашей коллекции результатов равен всем вашим тестам.
  • Убедитесь, что ваши результаты не полны до тех пор, пока не будет отведено время для самого длинного теста.

хм, все это связано с возможностью вставлять макеты / тестовые классы в очередь.

2 голосов
/ 11 января 2012

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

  • Один поток может извлечь элемент из очереди и сохранить его в базе данных.
  • Два потока могут одновременно извлечь элементы из очереди, иданные сохраняются, если первый поток пытается сохранить первый.
  • Два потока могут одновременно извлекать элементы из очереди, а данные сохраняются, если второй поток пытается сохранить первый.
  • Пятьдесятпотоки (или любое другое ограничение, подходящее для вашей программы) могут одновременно извлекать элементы из очереди и правильно сохранять данные.

Если вы используете одну из реализаций очереди блокировки JDK или реализациюубедитесь, что вы не пытаетесь проверить поведение самого класса очереди блокировки.Конечно, если вы написали свои собственные, то у вас есть намного больше тестов, которые вам нужно написать.

Надеюсь, это поможет.

2 голосов
/ 11 января 2012

Используйте механизмы рабочей очереди в java.util.concurrent и положитесь на них, чтобы протестировать их код.Затем просто проверьте работника, чтобы убедиться, что он делает правильные вещи.Если он не зависит от других потоков, этого должно быть достаточно.В противном случае вам, вероятно, потребуется разработать стратегию интеграционного тестирования для конфигураций оборудования / os / jvm, соответствующих вашей производственной среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...