BlackJack hat geschrieben:@Dav1d: Ich ging dabei von Tests aus, die ohne ”Magie” auskommen in dem man ”Innereien” durch Mock-Objekte ersetzt. Mit dem Argument ist am Ende fast jeder Code testbar.
Oder man machts wie in Java und übertreibt unsinnig mit Inversion of Control (
wobei Dependency Injection wohl der bessere Name ist) und macht einen "newDateService" der dann so aussieht:
[codebox=java file=Unbenannt.java]
interface INewDateService
{
Date newDate();
}
class NewDateService implements INewDateService
{
@Override
public Date newDate()
{
return new Date();
}
}
[/code]
Und injected den dann überall
oder man patcht den ClassLoader mit PowerMockito
Ontopic: Ich war lange Zeit der Meinung dieses übertriebene "magische" Whitebox-Testing ziemlich sinnlos ist, musste aber in letzter Zeit feststellen dass es extrem praktisch sein kann. Selbst sehr komplexe Code-Teile, die über mehrere Ebenen verteilt sind, kann man durch Whitebox-Testing sehr effektiv testen. Man mockt sich einfach alles externe weg und testet nun wirklich nur was der Code macht, macht man das für alle Dependencies der Funktion hat man sehr einfach sehr viele Fälle abgedeckt. Wobei das in Python (meiner Erfahrung nach) eher unüblich ist.