2017-10-17 1 views
0

Ich habe eine öffentliche void-Methode "a", die getestet werden soll, und in "a" habe ich eine Schleife mit String als Iterator, in dieser Schleife habe ich die öffentliche void-Methode von B mit dem String-Iterator als Parameter, den ich möchte, aufgerufen Mock, ich möchte einen Komponententest schreiben, um "a" mit PowerMock zu testen, wie kann ich dieses Ziel erreichen?Wie man Methode von anderer Klasse in einer Schleife mit PowerMock vortäuscht?

+0

Haben Sie statische Methoden refernces in Verfahren „a“, wenn nicht Mockito direkt verwenden, wird PowerMock bascially verwendet statische Methoden, Mock private Variablen, Konstrukteure Stub etc.and Ich hoffe, dass Sie nicht tun Testen Sie die Integration, testen Sie also nur die Methode von Klasse B und verwenden Sie die Mockito.doverify-Methode, um zu überprüfen, ob Ihre Methode tatsächlich aufgerufen wird oder nicht. –

Antwort

0

Haben Sie irgendwelche statische Methoden Referenzen in Methode "a", wenn nicht Mockito direkt verwenden, wird PowerMock grundsätzlich verwendet, statische Methoden stümpfen, private Variablen, Konstruktoren etc..Ich hoffe, Sie tun nicht Integrationstests Verwenden Sie also nur die Methode von Klasse B und verwenden Sie die Mockito.verify-Methode, um zu überprüfen, ob Ihre Methode tatsächlich aufgerufen wird oder nicht. Siehe meine Antwort unten.

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.Mockito; 
import org.mockito.junit.MockitoJUnitRunner; 

@RunWith(MockitoJUnitRunner.class) 

public class ClassATest { 

@InjectMocks 
ClassA classsA; 
@Mock 
ClassB classB; 
@Test 
public void testClassAMethod() { 
    //Assuming ClassA has one method which takes String array, 
    String[] inputStrings = {"A", "B", "C"}; 
    //when you call classAMethod, it intern calls getClassMethod(String input) 
    classA.classAMethod(inputStrings); 
    //times(0) tells you method getClassBmethod(anyString()) been called zero times, in my example inputStrings length is three, 
    //it will be called thrice 
    //Mockito.verify(classB, times(0)).getClassBMethod(anyString()); 
    Mockito.verify(classB, times(3)).getClassBMethod(anyString()); 
    } 
} 
Verwandte Themen