Какие-либо удовлетворительные подходы к потокобезопасности поблочного тестирования в Java?

Количество процессоров недостаточно. Выберите 1 CPU в Genymotion и перезапустите устройство.

41
задан Piotr Dobrogost 6 July 2009 в 16:11
поделиться

3 ответа

Забудьте получать хорошие результаты путем тестирования на проблемы параллелизма. Попытка уменьшить синхронизацию и сделать проблему меньшей. Тогда используйте максимально высоко поддержку библиотеки, чтобы сделать синхронизацию. И только если у Вас действительно есть тогда попытка обработать параллелизм самих. Когда Вы знаете, что каждый рабочий делает его корректную работу, и все Ваши взгляды говорят Вам, что Вам облизали проблему параллелизма, тогда генерируют некоторую интересную загрузку. Платформы Unittest и их расширения могут сделать то задание, но знать, что Вы не тестируете единиц больше. (Помните, Вам уже покрыли ту часть)

, Если Ваша модель параллелизма получает сложные инструменты выезда, которым удовлетворяют для того как ВРАЩЕНИЕ .

15
ответ дан Rene 27 November 2019 в 00:52
поделиться

Параллелизм Java на практике имеет некоторую большую информацию о как к тестам записи на проблемы параллелизма. Однако они не истинные модульные тесты. Почти невозможно записать истинный модульный тест на проблему параллелизма.

В основном это сводится к этому. Создайте набор тестовых потоков и запустите их. Каждый поток должен

  • , ожидают количества, вниз фиксируются
  • неоднократно вызов некоторый метод, который изменяет изменяемое рассматриваемое состояние
  • , считают в обратном порядке на втором фиксаторе и выходе

, поток junit создает все потоки и запускает их, затем считает в обратном порядке на первом фиксаторе однажды, чтобы позволить им всем пойти, затем ожидает второго фиксатора, затем делает некоторые утверждения об изменяемом состоянии.

Еще больше, чем другие типы ошибок, легче записать провальный модульный тест на ошибку параллелизма после , Вы нашли ошибку.

21
ответ дан Craig P. Motlin 27 November 2019 в 00:52
поделиться

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

Вот интересная статья (не знайте много об инструменте, хотя): http://today.java.net/pub/a/today/2003/08/06/multithreadedTests.html

1
ответ дан Phil 27 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: