Я использую EclEmma для анализа покрытия.Почему обложка EclEmma не синхронизирована (MyClass.class)?
Мой код Java включает в себя синхронизированный (MyClass.class) {} блок.
EclEmma говорит, что это только частично покрыто, событие, хотя у меня есть единичный тест, в котором один поток получает доступ, а другой поток заблокирован.
Можно ли получить полный охват синхронизации с использованием EclEmma?
Могу ли я прокомментировать код, чтобы сказать EclEmma, чтобы дать этой линии полное покрытие?
С наилучшими пожеланиями Роджер
Кажется, что вы правы. Я пробовал это: Object synch = MyClass.class; synchronized (synch) {}, но это не помогло, хотя в моем тесте есть один поток ожидания и другой поток, получающий мьютекс. –
По моему опыту, «synchronized» будет гореть зеленым, если синхронизированный блок содержит код, ожидающий на мониторе объекта, а тест прерывает ожидающий поток. Однако я никогда не потрудился копаться в инструментах EMMA, чтобы выяснить, действительно ли это в общем случае. –
После небольшого эксперимента я смог полностью охватить «синхронизированную» линию, если синхронизированный блок завершил нормально * и * завершил внезапно из-за исключения. –