Die Änderung von TestGeneratePrimes ist ok - sogar gewünscht (Erweiterung der Testfälle).
Die Änderung der Schnittstelle von GeneratePrimes ist auch möglich. Jedoch würde ich den Änderungsgrund kritisch hinterfagen.
Die Fowler-Methode liefert als Rückgabewert nur einen Status-Wert zurück. Der Statuswert gibt Aufschluss darüber, ob die Operation erfolgreich war oder nicht. D.h. jeder Entwickler muss hier den Rückgabewert überprüfen und ggf. eine Fehlerbehandlung starten.
Fowler geht von einem fehlerfreien Programmablauf aus und will diese (häufig vergessenen) Fehlerabfragen verhindern/eliminieren. Dafür macht er den Fehlerzustand explizit durch eine Exception.
Konkret ein solches Problem gibt es im Apache HTTPClient. Hier wird durch ein true oder false Flag angezeigt, ob die Put/Get-Operation geklappt hat oder nicht. Es muss also manuell jedes Mal überprüft werden, ob ein Fehlerzustand vorliegt. Zusätzlich werden noch diverse IOExceptions geworfen. Entwickler, die neu in der API sind, können hier Fehler machen indem sie nur die Exceptions abfangen und den Returnwert nicht überprüfen...
In deinem Fall gibst du ein Ergebnis zurück, das keinem Status entspricht (-1, 0-1 usw.) sondern konkrete Primzahlen. Insofern trifft das Fowler-Beispiel und das Refactoring meiner Meinung nach hier nicht zu. Aber grundsätzlich ist es vernünftig in Erwägung ziehen, ob man eine Exception werfen möchte. In diesem Fall gibt es Leitlinien wann man eine RuntimeException und wann eine "BusinessException" geworfen werden sollte. Aber hier scheiden sich gelegentlich auch die Geister... Wer mehr zu dem Thema lesen will, findet hier einen gute Startdokumentation und Diskussion:
http://java.sun.com/docs/books/tutorial ... index.html