2017-09-16 2 views
1

Ich lerne, wie Unit-Tests in Android Studio. Wie unten gezeigt, habe ich eine Methode namens "isValidUrl" und im Testabschnitt unten habe ich den Test dieser Methode mit Mockito codiert, aber der Test schlägt immer fehl.Wie eine Methode zu testen, gibt Boolean in Mockito

Kannst du mir bitte helfen und mir helfen, diese Methode zu testen?

Code

public boolean isValidUrl(String url) { 
    return (url != null && !url.equals("")) ? true : false; 
} 

Test:

public class ValidationTest { 
@Mock 
private Context mCtx = null; 

@Before 
public void setUp() throws Exception { 
    mCtx = Mockito.mock(Context.class); 
    Assert.assertNotNull("Context is not null", mCtx); 
} 

@Test 
public void isValidUrl() throws Exception { 
    Validation validation = new Validation(mCtx); 
    String url = null; 
    Mockito.when(validation.isValidUrl(url)).thenReturn(false); 
} 

}

Antwort

1

Sie erhalten eine Ausnahme, weil Sie versuchen, das Verhalten eines 'echten' Objekt zu verspotten (validation).

Sie müssen zwei Dinge trennen: Mocking und Assering.

Mocking bedeutet ‚fake‘ Objekte einer Klasse zu schaffen (wie Sie mit Context tat) hat und ihr Verhalten vor dem Test. In Ihrem Fall

Mockito.when(validation.isValidUrl(url)).thenReturn(false); 

Mittel, sagen Sie das validation Objekt gibt false zurück, wenn isValidUrl(url) genannt wird. Das können Sie nur mit gespotteten Objekten tun, und in Ihrem Fall hat das sowieso keinen Sinn, weil Sie das "echte" Verhalten Ihrer Validation Klasse testen wollen, nicht das Verhalten eines verspotteten Objekts. Mocking-Methoden werden normalerweise verwendet, um das Verhalten der Abhängigkeiten der Klasse zu definieren, in diesem Fall wiederum die Context. Für Ihren Test hier ist dies nicht notwendig.

Die Bestätigung führt dann den eigentlichen "Test" durch, wie sich die zu testende Klasse verhalten sollte.

Sie möchten, dass testen isValid() für eine url false zurück, die null ist:

Assert.assertEquals(validation.isValid(null), false); 

oder kürzer:

Assert.assertFalse(validation.isValid(null)); 

Sie assertEquals verwenden können, assertFalse, assertTrue und some others zu überprüfen, ob Ihre isValid() Methode gibt zurück, was es für einen gegebenen url Parameter zurückgegeben werden soll.

+0

Vielen Dank für Ihre Antwort..aber kann ich mehr als einen Assert in der gleichen Methode verwenden .. weil ich isValid (null), isValid (true) und isValid (false) testen möchte – user2121

+0

@ user2121 Ja können Sie. Es ist Geschmackssache, die meisten Leute würden Ihnen empfehlen, für jeden dieser Fälle eine zusätzliche Testmethode zu verwenden, aber Sie können in einer Testmethode auch so viele Assertionen ausführen, wie Sie möchten. – FWeigl

+0

danke..ich habe hier eine weitere Frage zum Testen gestellt: https: // stackoverflow.com/fragen/46262467/how-to-test-picasso-using-unit-test-und-mockito vielleicht wollen Sie einen Blick, und Ihre Antwort wird eine Leitlinie für mich und als Tutorial auch sein, weil ich bin Lerneinheiten lernen – user2121

Verwandte Themen