2017-03-23 2 views
3

Ich habe den folgenden Code, und ich weiß nicht, wie man es testet.Testen mit JUnit eine ungültige Methode

Ich habe versucht, auf die Zählung contD ++ zuzugreifen, und wenn ich 3 Negative habe.

Ich kann es nicht testen, mit so etwas wie dies im allgemeinen assertEquals(contD,3)

public void listarD() { 
    int contD = 0; 

    for(int i=0; i< clientes.length; i++) { 
     if(clientes[i].getSaldo() < 0) { 
      System.out.println(
        "Cliente: " + clientes[i].getNombre() + 
        ". Saldo: " + clientes[i].getSaldo()); 
      contD++; 
     } 
    } 

    if (contD == 0) { 
     System.out.println("No hay descubiertos :D"); 
    } 
    else { 
     System.out.println("TOTAL DESCUBIERTOS: " + contadorDescubiertos + " clientes"); 
    }  
} 
+1

Sie können eine Lücke auf diese Weise nicht testen. Sie müssen Ihren Code umgestalten – Jens

+0

Wenn Sie Ihren Code nicht richtig testen können, dann ist dies ein Anzeichen für schlechtes Design. – Bevor

+0

@Bevor das Konzept hinter schlechtem Design ist viel schäbiger als nur ein einfacher Test – karlihnos

Antwort

0

, eine Funktion, die nur durch die menschliche Auge überprüft werden kann kein gutes Design ist. Anrufer würden nie wissen, was passiert ist, nachdem sie Ihre Funktion aufgerufen haben. Entweder ein Rückgabewert oder eine Ausnahme für das Ergebnis ist besser als nichts.

3

Richtiger Weg wäre, eine Methode zu extrahieren, die Ihren contD Wert berechnet und es testet.

Und dann können Sie diese calculateContD() Methode testen.

3

Eine gut gestaltete Methode sollte einfach zu testen sein, die Tatsache, dass Sie Ihre Methode nicht testen können, ist ein Beweis für einen Konstruktionsfehler.

Einige Vorschläge:

  • das Ergebnis des Verfahrens nachprüfbaren Stellen (Das könnte bedeuten, dass es nicht mehr leer ist).
  • Lassen Sie die Ausgabe auf einem permanenten Speicher, wie Festplatte oder Datenbank.
2

Es gibt eine Möglichkeit, Sie theoretisch Test könnte dies: man kann Änderung das Objekt hinter System.out.

Also, theoretisch, könnten Sie einen "speziellen" OutputStream in System.out setzen; Führe deine void-Methode aus; und dann überprüfe, ob die Nachrichten, die du erwartest, in deinem Stream erscheinen.

Aber das macht einfach keinen (t viel) Sinn: Sie sehen, in der realen Welt drucken Sie selten auf system.out. In der realen Welt, Ihre Methoden entweder

  • tun Wert zurück
  • Anrufe auf anderen Objekte
  • Änderung einige interne Zustand des einschließenden Objekts/Klasse

Also: in In der realen Welt schreibst du Tests, die sich um solche Ereignisse kümmern.

Also, wie Sie sich gedacht haben; Die wirkliche Antwort ist, das Verhalten Ihrer void-Methode zu ändern; indem Sie den bereits berechneten Wert zurückgeben!

Verwandte Themen