Ich bin gerade dabei, eine wichtige Methode in einem Legacy-System umzugestalten. Es gab fast keinen Test, bis ich anfing, daran zu arbeiten, und ich habe ziemlich viel hinzugefügt, um die korrekte Arbeit nach meinen Umgestaltungen sicherzustellen.
Jetzt bin ich auf den wichtigsten Teil gestoßen: den Algorithmus, der einen Indikator berechnet. Es ist so etwas wie
indicator = (OneNumberFromA + AnotherNumberFromB) / elapsedTime;
Wie kann ich das richtige Verhalten für diese Funktion mit Unit-Tests testen?
Es gibt auch einige leicht unterschiedliche Algorithmen in den Funktionen, die das Programm in einigen Fällen erreicht - aber in allen von ihnen ist das elapsedTime
entscheidend für das Ergebnis.
System.currentTimeMillis()
durch eine MethodeTime.now()
, die normalerweise das gleiche tut, aber im Test kann gemacht werden, um einen beliebigen Wert zurückzugeben. Dies kann einige Anstrengungen erfordern, aber es ist unwahrscheinlich, dass etwas kaputt geht, da es sich um eine sehr konzentrierte und in sich geschlossene Änderung handelt.Zeitmessung und Indikatorauswertung sollten in verschiedenen Funktionen erfolgen. In Ihrem Fall
elapsedTime
sollte eine Eingabe der Bewertungsfunktion sein. Auf diese Weise kann Ihr Evaluierungscode getestet werden und ist leichter zu verstehen.Jetzt haben Sie immer noch das Problem, die Zeitmessfunktion zu testen, aber dies geht über den Rahmen dieser Frage hinaus.
quelle