Ich habe ein persistentes Objekt mit 7 relevanten Feldern.Wie würden Sie etwas testen, das komplexe Objekte filtert
Die Felder können die Anzahl der Werte halten hier aufgelistet:
Field # of Possible Values
1 5
2 20
3 2
4 2
5 19
6 2
7 8
, die ein Potential für 121.600 einzigartige Objekte ist.
Bei dem getesteten Code handelt es sich um eine Anzahl von Filtern, die basierend auf den Werten ihrer Felder eine bestimmte Anzahl dieser Objekte abruft und sie dann zur Verwendung durch ein anderes System in eine Bin ablegt. Die Ablage ist trivial, getestet und funktioniert einwandfrei ... es ist nur so, dass die Filterung nicht funktioniert. Es scheint viele Randfälle zu geben, die nicht abgedeckt werden und viele Objekte werden in einen Behälter gestellt, wenn sie überhaupt nicht ausgewählt werden sollten oder umgekehrt.
Alles in allem gibt es 9 Filter, die in einer Kette von Verantwortung arbeiten, wobei jeder Filter Objekte in einen Behälter legt, bis der Behälter voll ist, an welchem Punkt die Kette austritt. Der letzte Filter in der Kette ist einfach ein "Filter", der eine E-Mail an einen Administrator sendet, der feststellt, dass die Objekte knapp sind (dh, wenn die Kette diesen Filter erreicht hat, dann ist die Bin nicht voll und muss etwas tun angeschaut werden).
Also mein Problem ist das: Wie teste ich diese Filter? Ich ein jeden einzelnen Objekttyp erstellen könnte eine Reihe von für Anweisungen mit:
public void FixtureSetup()
{
for(each possible value for field 1)
{
for(each possible value for field 2)
{
// ... continue with 5 more for statements
// Create Object with each value
}
}
}
Aber versuchen, manuell herauszufinden, was sollte aus den resultierenden Sammelobjekten richtig gefiltert werden (auch die Sammlung von gefilterten Objekten) wäre furchtbar schwierig (und wenn möglich, hätte ich es leicht gemacht, als ich zuerst die Filter schrieb).
Ich bin mir bewusst, dass die Anforderungen an Schuld, weil sie etwas sagen wie:
filter 1 gets
- field 1: values 1/2/3
- field 2: values 2/3/4
- etc.
aber die Ergebnisse zeigen so viele Grenzfälle, dass jedes Mal, wenn ich es ändern, dass die speziellen Fall zu schließen, etwas sonst bricht (und ich habe keine Regressionstests, um sicherzustellen, dass dies nicht der Fall ist) und es ist schwierig herauszufinden, wo in der Kette das jeweilige Problem aufgetreten ist.
bearbeiten> Ich versuche, die Filter einzeln zu testen, jedoch gelten folgende Voraussetzungen:
Filter 1 Greifer 500 der 121.600 möglichen Objekte (nach den Kriterien des Filters). Ich finde das, sage 100 (vollständige Schätzung) der Objekte, die ergriffen werden, sollte nicht - und aus unterschiedlichen Gründen. Um das zu wissen, müsste ich jeden mit den Benutzern des anderen Systems durchgehen, um zu wissen, ob die Ergebnismenge jedes Filters korrekt ist. Das Gegenteil davon bleibt mir auch in Erinnerung ... was ist mit all dem Gegenstand, der hätte gegriffen werden sollen, aber nicht waren.
Ich fange an zu denken, dass dies ein Problem bei der Anforderungserfassung und nicht beim Testen sein könnte.
Nur um Sie zu aktualisieren Eric: Ich tat dies tatsächlich und war in der Lage, das Problem und seine Lösung besser zu definieren. Vielen Dank. –