Ankündigung

Einklappen
Keine Ankündigung bisher.

Unit-Tests

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unit-Tests

    Hallo,
    möchte nochmal zum Thema Unit-Tests zu sprechen kommen, ganz allgemein und Programmiersprachen unabhängig. Im speziellen Fall geht es aber um C++ und CPPUNIT.
    Vielleicht könnt ihr mir eure Gedanken dazu kurz erläutern.

    Was sind Unit-Tests:
    Es geht darum Klassen und Funktionen auf deren korrekte Funktion zu testen. Also return-Werte, übergebene&veränderte Referenzen per Argument oder eben "heimliche" Funktionsweise (bool CreateFile(string name), wurde die Datei wirklich erstellt?).

    Wie testen:
    Mein Betreuer hier im Praxisforum hatte vorgeschlagen, auch die internen Zustände (private Variablen) zu testen, ich bin aber der Meinung, die Funktionsweise zu testen macht keinen Sinn, sondern es kommt lediglich auf das Ergebnis drauf an. Was wenn sich die Implementierung ändert, nicht aber die Schnittstelle? Der Unit-Test würde dann fehlschlagen, obwohl das Ergebnis immernoch korrekt, aber anders verarbeitet wird.
    Ich soll aber eigentlich trotzdem auch private Methoden testen etc.
    Aber wie beschrieben, für mich ergibt das keinen Sinn. Für euch?

    Edit: Die Schwierigkeit die mich plagt ist auch, wie teste ich Methoden ohne andere Methoden zu verwenden?

  • #2
    so kann er es nicht gemeint haben.
    private methoden kannst und sollst du so gar nicht testen.
    unit tests machen im prinzip nur für public und protected - funktionalität sinn, d.h. für funktionen, die in der schnittstelle sichtbar sind. trotzdem solltest du den kompletten entscheidungsbaum abgrasen, d.h. jede entscheidung testen, die ergebnisse u.U. verändern kann.

    kleines beispiel:

    PHP-Code:
    class {
     
      private function 
    dong() {
          return 
    0;
     }
       private function 
    dung() {
            return 
    1;
       }
     public function 
    hello($ding) {
           if(
    $ding) {
              return 
    $this -> dong();
           } else  {
              return 
    $this -> dung();
           }
     }
    }

    // test

    class Test {

         public function 
    test_1() {
            
    $a = new A();
           
    $this -> assertEquals(1,$a -> hello(false));
            
    $this -> assertEquals(0,$a -> hello(true));
         }

    damit hast du schon alles getestet, und die privaten methoden damit auch.

    also:
    * code-coverage-tool hernehmen
    * gucken, ob du den code komplett abgegrast hast
    * wenn nicht, hast du entweder nicht genug getestet oder du hast obsoleten code.

    Kommentar

    Lädt...
    X