test driven development (TDD)

&

Refactoring

Anforderungen

1.  Die Methode kann 0, 1 oder 2 Zahlen addieren.

                    Die Zahlen werden durch ein Komma getrennt.

                    Ein leerer String entspricht der Summe 0 + 0.

2.  Die Methode kann eine beliebige Anzahl von

      Zahlen addieren

3.  Die Zahlen können auch von anderen Zeichen

       getrennt werden

2. IMPLEMENTIERUNG

public class StringCalculator {
    public static int add(final String numbers) {
        String[] numbersArray = numbers.split(",");
        if (numbersArray.length > 2) {
            throw new RuntimeException("Up to 2 integers separated by comma (,) are allowed");
        } else {
            int sum;
            for (String number : numbersArray) {
                sum += Integer.parseInt(number);
            }
            return sum;
        }
    }
}
import org.junit.Test;
 
public class StringCalculatorTest {
    @Test(expected = RuntimeException.class)
    public final void whenMoreThan2NumbersThenException() {
        StringCalculator.add("1,2,3");
    }
    @Test
    public final void when2NumbersThenNoException() {
        StringCalculator.add("1,2");
        Assert.assertTrue(true);
    }
    @Test(expected = RuntimeException.class)
    public final void whenNonNumberThenException() {
        StringCalculator.add("1,X");
    }}

1. TESTCASE

White
Box
Test

grey
Box
Test

Black
Box
Test

White-Box-Test

  • Algorithmus und Test vom selben Entwickler
  • erst Code, dann Test
  • billig
  • plattformspezifische Tests
  • fehleranfällig
  • nicht plattformübergreifend

BLACK-Box-Test

  • Algorithmus und Test von verschiedenen Entwicklern
  • objektive Verifikation
  • plattformübergreifende Tests
  • teuer und personenintensiv
  • benötigt sehr präzise Spezifikation

Grey-Box-Test

  • Algorithmus und Test vom selben Entwickler
  • erst Test, dann Code
  • relativ günstig
  • objektive Verifikation
  • plattformübergreifende Tests
  • hohe Verantwortung für Entwickler

Refactoring

Vorteile DES TDD

  • Testentwicklung vor dem Coding
    • kein Zeitdruck
    • gute Dokumentation
    • vollautomatische Testcases
  • Kurze Test-Code-Refactor Zyklen
    • Tests überschaubar
    • Bugs im Keim erstickt
    • Code leicht lesbar & wartbar

TDD LOHNT sich

TDD

By Jan Kleiss

TDD

  • 411