2016-05-05 9 views
0

Ich habe einen Test wie folgt, wo in der gegebenen Bedingung, ich möchte sicherstellen, mainPresenter.presenterFunction() wird nicht aufgerufen.Wie kann ich testen, ob eine Methode für ein nicht mock-Objekt aufgerufen wird?

class MainPresenterTest { 

    val mainPresenter: MainPresenter 
    val mainView: MainView 
    val mainBridge: MainBridge 

    init { 
     mainView = mock(MainView::class.java) 
     webBridge = mock(MainBridge::class.java) 
     mainPresenter = MainPresenter(mainView, mainBridge) 
    } 

    @Before 
    fun setUp() { 
     MockitoAnnotations.initMocks(this) 
    } 

    @Test 
    fun simpleTeset1() { 
     // Given 
     whenMock(mainView.viewFunctionCondition()).thenReturn(true) 

     // When 
     mainPresenter.onTriggger() 

     // Then 
     verify(mainView).viewFunction1() 
     verify(mainPresenter, never()).presenterFunction() 
     verify(mainView, never()).viewFunction2() 
    } 
} 

es Fehler aus Jedoch

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type MainPresenter and is not a mock! 
Make sure you place the parenthesis correctly! 

Der Fehler auf der Leitung verify(mainPresenter, never()).presenterFunction()

Es als mainPresenter erwartet ist unter Angabe ist kein Mock-Objekt. Wie kann ich eine Methode testen, die für ein Nicht-Mock-Objekt aufgerufen wird?

Ich sehe die Antwort in how to verify a method of a non-mock object is called?, aber das ist immer noch mit Mock und Spy. Ich hoffe, einen Weg zu finden, ohne für eine Klasseninstanz, die ich bereits habe, zu verspotten.

(Hinweis: Die oben in Kotlin geschrieben)

+1

Wie in der Antwort, auf die Sie verwiesen haben, gezeigt wurde, wurde spy entwickelt, um genau dieses Problem zu lösen - Sie können damit Aufrufe einer nicht-mock-Objektinstanz verifizieren. Kannst du erklären, warum Spion nicht benutzt werden kann? –

+1

Das, was Sie versuchen, ist auch ein Zeichen für schlechtes Klassen-Design. Halten Sie Ihre Interna geheim und testen Sie externes Verhalten. – nhaarman

Antwort

4

die per Definition nicht funktionieren.

Mocking Frameworks können nur Aufrufe von Mock-Objekten verify. Sie haben keine Möglichkeit zu wissen, was mit Objekten passiert ist, die sie nicht kontrollieren. Sie müssen entweder Ihren Moderator verspotten, ihn durch einen Stub oder ... ersetzen.

Nun, ich denke, das sind die einzigen beiden Möglichkeiten.

Verwandte Themen