bevor jemand abgeschreckt wird: Ja ich muss das in C++ lösen, denke aber ein Lösungsprinzip oder die Methodik sollte sprachunabhängig sein...
Ich stehe gerade vor dem Problem, wie ich folgende Funktionalität in C++ mittels Unit Tests gut abdecken kann:
Code: Alles auswählen
void class::method(...) {
if(obj_a.some_member &&
obj_a.some_method() &&
!obj_b.some_member &&
obj_c.some_method()) {
// make some call ← Testen, ob Aufruf erfolgt ist oder nicht
}
}
Ach so, als Testframework kommt die Kombi googletest und googlemock zum Einsatz! Aber mir geht es hier eher ums generell Prinzip, also nicht davon abschrecken lassen
Aber: Wie geht man das am besten in Unit Test(s) an? Insbesondere bei vielen Bedingungen wachsen die Kombinationen ja exponentiell! (eben 2^n).
Ich habe mir schon überlegt, dass man die Bedingungen natürlich sinnvoll bündeln könnte, so dass man diese zusammengefassten Spezifikationen separat testen kann und am Ende nur noch wenige en block im "finalen" ``if`` stehen hat. Dies ist aber vermutlich nicht immer so einfach und zum anderen können dann immer noch drei oder vier "Gruppen" übrig bleiben, was imho immer noch zu viel für separate Tests ist, sondern über parametrisierte abgedeckt werden muss.
Unabhängig davon bleibt die Frage, wie ich hier vorgehe... mir fallen da immer Wahrheitstafeln ein, die ich als Parameter in der Kombi ``0101 → True``, ``0001 → False``, ... einem Test übergeben kann. Für den oben geschilderten Fall ist das aber ziemlich "doof", weil ja nur *eine* Kombination überhaupt "wahr" wird, und alle anderen falsch sind. Die eine kann man ja leicht *explizit* angeben, die anderen vielen will man aber ja eher generiert haben... (eben mit Ausnahme der "wenigen").
Das wäre sicherlich irgend wie machbar, aber dann stellt sich die Frage nach der Leserlichkeit und Wartbarkeit? Ist es dann nicht ggf. doch besser, die Werte explizit anzugeben und sich die Kombis notfalls per Script zusammen basteln zu lassen?
Vielleicht ist auch der ganze Ansatz unschön, wobei ich da vermutlich nicht zu viel daran ändern kann...
Ich hoffe mal, jemand hat eine gute Idee dazu, oder bestärkt mich darin, es so anzugehen, wie ich mir das gedacht habe