2013-09-22 1 views
1

Я пытаюсь написать junit, чтобы проверить использование java-мониторов в моем коде. Есть ли способ утверждать, что wait() был вызван для определенного объекта. Я попробовал разные комбинации obj и mockito spy, чтобы частично его заглушить, но он либо бросает IllegalMonitorStateException, либо просто ждет ожидания, а не ловит вызов метода.Junit - тестовый вызов obj.wait()

public void waitTest(){ 
    RWLock lock= new RWLock(); 
    RWLock lockSpy = spy(lock); 

    lock.lockRead(); 
    synchronized (lockSpy) { 
     verify(lockSpy).wait(); 
    } 
} 

class RWLock{ 
    public synchronized void lockRead(){ 
     wait(); 
    } 
} 

Я бы очень признателен за любую помощь, которую я могу получить от этого. Благодаря!

+0

Покажите нам код mockito. –

+0

Я использую mockito spy здесь: RWLock lockSpy = шпион (замок); // для создания шпиона и проверить (lockSpy) .wait(); // проверить – mindreader

ответ

2

Ваша проблема в том, что wait() является окончательным. Mockito не может проверить окончательные методы.

+0

нормально, я вижу. Есть ли другой способ сделать это? Скажем, используя powermock? – mindreader

+0

@mind Это не ограничение рамки. Это прокси-ограничение. Поскольку метод является окончательным, он не может (легко) проксироваться. –

+1

Я не эксперт PowerMock, поэтому не могу комментировать. Очень возможно, что он сработает. Вы можете попробовать. Но здесь есть большая проблема. Я не понимаю, почему вы хотите проверить, вызван ли вызов 'wait'. У вашего класса должно быть какое-то требуемое поведение, которое не обязательно зависит от того, какие методы вызываются внутренне. Не можете ли вы просто проверить поведение, а не тестировать детали реализации? –

 Смежные вопросы

  • Нет связанных вопросов^_^