Nein. Das Testen sollte gründlich sein. Das Finden von Problemen wird erwartet.
In einigen Programmierumgebungen (z. B. BlueJ oder NetBeans) können Methoden einzeln getestet werden. Das wird als Unit-Testing bezeichnet, da nur eine Einheit (oder ein Modul) für sich allein gründlich getestet werden kann. Module sollten sobald wie möglich getestet werden. Ein komplettes Programm erst am Ende sorgfältig zu testen, kann eine hoffnungslose Aufgabe sein.
Wir brauchen eine main()
Methode, um die Methode zu steuern. Hier ist ein Unit-Test unserer Methode:
Wir werden für N
in der main()
Methode verschiedene Werte testen, um zu überprüfen ob die Methode korrekt funktioniert.
Die zu überprüfenden Werte sind 0, 1, 2, 6, 20, -1 und -2.
Es ist wichtig 0, 1 und -1 zu testen, da Methoden oft an ihren "Grenzen" scheitern.
Eigentlich ist unsere ursprüngliche main()
selbst ein gutes Testgerüst für factorial()
und wir müßten uns wahrscheinlich nicht mit dem folgenden Code herumschlagen. Aber manchmal erfordert ein dorniges Debugging-Problem eine einfache main()
.
Wenn wir ein vollständiges, funktionierendes Programm wollen, ersetzen wir die Stub factorial()
Methode in der vollständigen main()
durch die unten stehende Nicht-Stub factorial()
Methode.
public class UnitTest { public static long factorial( int num ) { long fct = 1; for ( int j=1; j<=num; j++ ) fct *= j; return fct; } public static void main(String[] args) { int N = 6; System.out.println( "factorial of " + N + ": " + factorial(N)); } }
Im Verlauf des Unit-Tests ändert ein Programmierer N
in 21 und sieht:
factorial of 21: -4249290049419214848
Ein NEGATIVER Wert! Das Produkt von positiven ganzen Zahlen sollte keinen negativen Wert ergeben!
Was ist falsch gelaufen?