Unit-Tests – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #95

Dieser Beitrag ist Teil 13 von 15 in der Serie Häufige Fragen im Fachgespräch.

Nachdem letzte Woche bereits häufige Fragen im Fachgespräch rund um das Thema Softwaretests besprochen wurden, folgen nun einige Detailfragen zum Bereich Unit-Tests in der fünfundneunzigsten Episode des Anwendungsentwickler-Podcasts.

Probeabo bei Audible (Affiliate)

Inhalt

  • Was ist eine Unit?
    • Die kleinste zu testende Einheit, meist eine Methode.
  • Wie unterscheiden sich Unit- bzw. Komponenten-, Integrations- und Systemtest?
    • Unit-Test: Einzelne Komponente wird in Isolation getestet
    • Integrationstest: Das Zusammenspiel mehrerer Komponenten wird getestet
    • Systemtest: Das System als Ganzes wird auf Funktionalität getestet
  • Was ist ein Unit-Test-Framework?
    • Ein Softwareframework, das den Entwickler beim Schreiben automatischer Tests unterstützt.
  • Was ist eine Assertion?
    • Eine konkrete Prüfung in einem Unit-Test (z.B. Gleichheit von Werten).
  • Was bedeutet AAA?
    • Arrange, Act, Assert
  • Was ist Mocking?
    • Abhängigkeiten werden durch Fake-Objekte ersetzt, um die eigentlich zu testende Komponente in Isolation ausführen zu können.
  • Was ist Code-Coverage?
    • Der Grad der Abdeckung des Codes durch die Tests.
  • Welche Eigenschaften sollten Unit-Tests haben?
    • Schnell, einfach, isoliert, wiederholbar, verlässlich, keine Infrastruktur verwenden.
  • Was ist ein Mutationstest?
    • Ein Test, der den zu testenden Code verändert, um die Testabdeckung durch vorhandene Tests zu prüfen.
  • Was ist die Testpyramide?
    • Eine Empfehlung für das Verhältnis zwischen Unit- (viele), Integrations- (mehrere) und Systemtests (wenige).
  • Wie kann man Oberflächen testen?
    • Manuell oder mit Hilfe von Frameworks wie Selenium.

Literaturempfehlungen

Einen sehr schönen Einstieg in das Thema Unit-Testing liefert Jeff Langr in seinem Buch Pragmatic Unit Testing in Java 8 with JUnit*. Er fängt „bei 0“ an und erklärt alle wichtigen Konzepte inkl. Mocking für die Praxis. Außerdem arbeitet er auch mit den neuen Features von Java 8 (Lambdas, Streams) um die Tests zu optimieren. Sehr empfehlenswert! Ich lasse es meine Azubis als Grundlagenbuch lesen und werde bald auch einen Buchclub dazu aufnehmen.

Jeff Langr - Pragmatic Unit Testing in Java 8 with JUnit (Affiliate)*

Und wenn du ein Buch lesen möchtest, dass dir noch einmal einen völlig anderen Blick auf das Vorgehen bzgl. der Tests beim Schreiben einer Software ermöglicht, empfehle ich dir wärmstens Growing Object-Oriented Software, Guided by Tests*. Die beiden Autoren zeigen ein komplett testgetriebenes Vorgehen, das mit Integrationstests beginnt. Ein sehr spannender Ansatz, der mit einem großen Praxisbeispiel in Java illustiert wird. Hier habe ich das Buch schon vor einigen Jahren rezensiert: Growing Object-Oriented Software, Guided by Tests (Freeman/Pryce).

Growing Object-Oriented Software, Guided by Tests - Amazon (Affiliate)*

Links

Navigation der Serie<< Testverfahren für Software – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #94Handelskalkulation, Skonto und Rabatt – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #148 >>
Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

7 comments on “Unit-Tests – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #95

  1. André sagt:

    Moin Stefan,

    war wieder mal ein sehr guter Podcast. Mit Tests muss ich mich gerade intensiver beschäftigen. Da kam der Podcast wie gerufen.

    Gibt es einen Plan für die nächste Folgen – bezogen auf das Fachgespräch? Wir hören von unseren Jahresvorgängern (Bremen) immer wieder, dass es viele Fragen zum Thema Datenschutz gab. Würde mich freuen, dazu was auf die Ohren zu bekommen.

    Grüße

    André

  2. Stefan Macke sagt:

    Hallo André,

    freut mich, dass ich helfen kann 🙂

    Datenschutz ist natürlich ein sehr wichtiges Thema. Bringen viele Prüflinge leider immer noch mit Datensicherheit und Datensicherung durcheinander. Guter Vorschlag für eine Podcast-Episode! Nehme ich auf die Liste. Kann aber noch ein wenig dauern…

    Viele Grüße!
    Stefan

  3. Julian sagt:

    Hallo Stefan,

    mein Fachgespräch steht quasi kurz bevor und ich habe vorher noch einmal deine Podcasts durchgehört. Respekt für deine Podcasts! Echt sehr gut komprimiertes Wissen ohne dabei an Qualität zu sparen.

    Schöne Grüße und vielen Dank für die tollen Podcasts!

    Julian

  4. Stefan Macke sagt:

    Hallo Julian,

    freut mich, dass ich helfen kann! 🙂 Dann hoffe ich mal, dass du auch nach Unit-Tests gefragt wirst! 😉

    Viel Erfolg beim Fachgespräch! Sag mir gerne bescheid, wie es ausgegangen ist.

    Viele Grüße!
    Stefan

  5. Computerlinguist sagt:

    Selenium WebDriver heißt jetzt einfach WebDriver und ist eine W3C Recommendation.
    Ein Mock-Objekt ersetzt das „echte“ Objekt. Stubbing gibt den gewünschten Rückgabewert beim Aufruf einer Methode des Mock-Objekts an (Objekte geben keine Werte zurück). Außerdem gibt es noch Spy, das ist ein „echtes“ Objekt, bei dem einzelne Methoden gestubbt werden können, während der Rest der Methoden vom Original verwendet werden. Außerdem kann man bei einem Spy wie bei einem Mock Abfragen über aufgerufene Methoden etc. machen.
    Die Reihenfolge der Ausführung von Testmethoden in einer Testklasse liegt nicht fest (es ist zwar möglich, sie alphabetisch sortiert auszuführen, aber es sollte sowieso keine Abhängigkeiten geben, so dass die Reihenfolge egal ist).

    4 thoughts on “Unit-Tests – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #95”
    Kann man das Denglisch nicht ganz auf Deutsch umstellen?

  6. Ramona sagt:

    Hallo Stefan,

    danke für die Informationen in diesem Podcast, das ist alles sehr nützlich.
    Aber ich habe eine Anmerkung zu machen: auch die Methoden, die void zurückgeben, können mit Unit Tests getestet werden.

    Nehmen wir ein Beispiel:
    eine Methode, die void zurückgibt und als Parameter ein Objekt vom Typ Customer nimmt und es zu einer gegebenen Liste von Customers hinzufügt.
    Wir können die Funktionalität der Methode testen und behaupten, dass das Objekt Customer der Liste der Kunden hinzugefügt wurde. Oder eben nicht. 🙂

    Bitte korrigieren Sie mich, wenn ich falsch liege,
    Vielen Dank und noch einen schönen Tag!
    Ramona

  7. Stefan Macke sagt:

    Hallo Ramona, das stimmt! Aber würdest du die Methode wirklich so bauen? Sollte sie nicht besser so aussehen: List<Customer> addToCustomerList(List<Customer> existingCustomers, Customer newCustomer) Dadurch würde explizit, was passiert, und die Liste wird nicht manipuliert, sondern eine neue zurückgegeben (Stichwort Immutability). Diese Methode kannst du dann ganz klassisch testen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax