Używam EclEmma do analizy zasięgu.Dlaczego pokrywa EclEmma nie jest zsynchronizowana (MyClass.class)?
Mój kod Java zawiera blok synchronizowany (MyClass.class) {}.
EclEmma mówi, że jest tylko częściowo zakryty, mimo że mam test jednostkowy, w którym jeden wątek uzyskuje dostęp i inny wątek jest zablokowany.
Czy możliwe jest uzyskanie pełnego zasięgu synchronizacji przy użyciu EclEmma?
Czy mogę opisać kod w jakiś sposób, aby powiedzieć EclEmma, aby przekazać tę linię w pełnym zakresie?
poważaniem Roger
Wygląda na to, że masz rację. Próbowałem tego: Object synch = MyClass.class; synchronized (synch) {}, ale to nie pomogło, mimo że mój test ma jeden wątek czekający i inny wątek dostaje muteksa. –
Z mojego doświadczenia wynika, że 'zsynchronizowane' zapali się na zielono, jeśli blok synchronizowany zawiera kod, który czeka na monitorze obiektu, a test przerywa wątek oczekujący. Nigdy nie zadałem sobie trudu, aby zagłębić się w oprzyrządowanie EMMA, aby dowiedzieć się, czy jest to prawda w ogólnym przypadku. –
Po krótkich eksperymentach udało mi się osiągnąć całkowite pokrycie linii 'zsynchronizowanej', jeśli zsynchronizowany blok zakończył się normalnie * i * zakończył się nagle z powodu wyjątku. –