Testen Sie eine Methode mit Rückgabetyp void
Ich bin neu in der software zu testen. In einem tutorial habe ich gelesen, dass ich testen kann, einige Methoden, wie diese:
@Test
public void testMultiply() {
MyClass tester = new MyClass();
assertEquals("10 x 5 must be 50", 50, tester.multiply(10, 5));
}
So habe ich einige Parameter an eine Methode und bekommt einen Wert zurück.
Aber in meinem Fall habe ich einige Klassen ohne Parameter und return-Werte:
ArrayList al = new ArrayList();
public void Main(){
methodA();
methodB();
}
public void methodA(){
//connect to URL
//get some data
for(int i=0; i<someThing; i++){
al.add(data);
}
}
public void methodB(){
//do something with al
}
Ist es auch möglich, um Sie zu testen? Zum Beispiel, ob der richtige Wert kommt von der URL in methodA()
.
Sicher, Sie können. Es sieht aus wie
Ja, es ist abhängig davon, was wichtig ist, dass Sie verwenden können, mockito, um zu überprüfen, ob eine Umsetzung aufgerufen wurde, oder Sie können überprüfen Sie das Objekt, das es mutiert.
Natürlich. Normalerweise, wenn kein Fehler Auftritt, während der Aufruf der Funktion ohne Parameter und Rückgabewert, es bedeutet, dass die Funktion arbeiten konnte. Natürlich, es ist überhaupt nicht wahr. Für diesen Zweck könnte man einfach mit dem debugger und testen Sie den Fluss des Programms.
mögliche Duplikate von Wie um zu testen, void-Methode mit Junit-testing-tools?
methodA()
ist die änderung des internen Zustands von einer ArrayList
, so können Sie Ihre test-Klasse prüfen Sie den Inhalt der Liste vor und nach der Ausführung der Methode.Ja, es ist abhängig davon, was wichtig ist, dass Sie verwenden können, mockito, um zu überprüfen, ob eine Umsetzung aufgerufen wurde, oder Sie können überprüfen Sie das Objekt, das es mutiert.
Natürlich. Normalerweise, wenn kein Fehler Auftritt, während der Aufruf der Funktion ohne Parameter und Rückgabewert, es bedeutet, dass die Funktion arbeiten konnte. Natürlich, es ist überhaupt nicht wahr. Für diesen Zweck könnte man einfach mit dem debugger und testen Sie den Fluss des Programms.
mögliche Duplikate von Wie um zu testen, void-Methode mit Junit-testing-tools?
InformationsquelleAutor user1170330 | 2014-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, test-Methoden, die nicht zurückkehren, alles andere (
void
), aber Sie müssen testen dieser Methode die Nebenwirkungen. Es soll einige Nebenwirkungen haben, andernfalls ist eine solche Methode ist nutzlos.Den Nebeneffekt hier ist, dass
al
geändert wird. Wie geschrieben, diese Klasse hat keine anderen Methoden verfügbar gemachtal
. Fügen Sie eine getter-Methode liefert entweder dieArrayList
oder ein spezifisches element derArrayList
. Dann Ihr test-Methode kann den Aufruf der getter-Methode zum abrufen des Werts(s) und vergleichen Sie es(Sie) mit dem erwarteten Wert(s).Wie werden diese Daten verwendet? Wenn es verwendet wird, durch andere Methoden wie
methodB
, dann können SiemethodB
und testen Ihre Nebenwirkungen.Ja. Sie schreiben eine messbare Komponente, und das bedeutet, dass das schreiben genug, Zugriffsmethoden, dass Sie es testen kann. Wenn diese sollte nicht aufgerufen werden, in der Produktion, dokumentieren Sie diese als solche.
InformationsquelleAutor rgettman
Ja, sicherlich können Sie testen, eine Methode ohne Parameter auf.
Kann es sein, dass ein Beispiel, ist der beste Weg zu sehen. Denken Sie über die
ArrayList.clear()
Methode. Was es tut, ist, leeren Sie denArrayList
, so dass seine Größe ist dann null. Sie würden den test dieser Methode durch:ArrayList arr
;arr.clear()
;assertEquals(arr.size(),0)
.In anderen Worten, Sie sind die Einstellung die Dinge so, dass Ihr
ArrayList
hat einen Zustand, die Sie nicht wollen (size()>0
); dann sind Sie aufrufen der Methode, die sollten eine vorhersagbare Wirkung auf den Zustand (Einstellungsize()
zu0
); dann prüfen, dass die Wirkung ist wie erwartet.Naja, der Punkt ist, dass die Methode, die getestet werden müssen, haben eine gewisse Wirkung auf den Staat, und dass Veränderungen im Zustand, müssen nachweisbar mit den Methoden hast du schon... sonst entweder die Methode ist sinnlos, oder Sie brauchen noch ein paar mehr Methoden! In anderen Worten, wenn Sie nicht alle Methoden, die unterschiedlich handeln, je nachdem, ob Sie gelöscht haben die
ArrayList
, es würde nie mehr eine Stelle in der Reinigung.InformationsquelleAutor chiastic-security
Methoden ohne Parameter verwendet werden, um die Rückkehr Wert oder für Ihre Nebenwirkungen. Daher die Prüfung dieser Methoden besteht aus den folgenden drei Schritten:
Letzten Schritt können Sie entweder den neuen Zustand des Objekts, die geprüft werden, oder die Ergebnisse seiner Arbeit in der gesamten Umwelt des Systems.
Hier ist ein kleines Beispiel:
Könnten Sie testen, Ihre
multiply()
Methode wie diese:Diese tests Nebenwirkungen der Methode. Testen Sie eine Methode mit einem Rückgabewert und keine Nebenwirkungen kombinieren würde der Aufruf der Methode mit Ihrer Prüfung auf die Geltendmachung Linie.
Das ist eine faire Beobachtung, ich danke Ihnen sehr!
InformationsquelleAutor dasblinkenlight
Ja, Sie können testen Sie diese Methode wenn Sie diese Methode in anderen Methoden als Nebenwirkungen.
Wie zum Beispiel-
So können Sie testen, erhöht Methode für die überprüfung der Wert i um 1 erhöht oder nicht, mit dieser Methode, die Sie intern testen Sie Ihre incrementIngeterValue() ohne parameter und Rückgabewert.
In Ihrem Fall, dass Sie a1 erfolgt bei beiden Methoden. irgendwo Sie sind mit diesem a1.
InformationsquelleAutor Moni
In diesem Fall sind Sie versuchen zu testen, die Nebenwirkungen der Aufruf anstatt der Ausgabe (z.B. return-Wert) der Anruf selbst. Sie können dies testen, in einer Reihe von verschiedenen Möglichkeiten:
In Ihrem speziellen Fall würde ich hinzufügen, ein accessor für al und seinen Inhalt Spiel erwartet, nach dem Aufruf von AMethod().
Im Allgemeinen für unit-Tests, die Sie nicht wollen, um eine Verbindung zu externen URLs, Datenbanken, etc, weil es langsam und teuer. Sie ersetzen möchten, und diejenigen, die Anrufe mit Daten-Anbieter simulieren statt.
InformationsquelleAutor Ryan F