Was sind einige Strategien zum Testen großer Zustandsautomaten?

Ich habe eine große und ziemlich komplexe Zustandsmaschine geerbt. Es gibt 31 mögliche Zustände, die alle wirklich benötigt werden (Big Business-Prozess). Es hat die folgenden Eingaben:

Enum: Aktueller Status (also 0 -> 30)Enum: Quelle (derzeit nur 2 Einträge)Boolean: RequestBoolean: Geben Sie @ e Nummer: Status (3 Status)Enum: Handling (3 Zustände)Boolean: Abgeschlossen

Das Aufteilen in separate Zustandsautomaten erscheint nicht machbar, da jeder Zustand unterschiedlich ist. Ich habe Tests für die gebräuchlichsten Eingaben geschrieben, mit einem Test pro Eingabe, wobei alle Eingaben bis auf den Status konstant sind.

[Subject("Application Process States")]
public class When_state_is_meeting2Requested : AppProcessBase
{
    Establish context = () =>
    {
        //Setup....
    };

    Because of = () => process.Load(jas, vac);

    It Current_node_should_be_meeting2Requested = () => process.CurrentNode.ShouldBeOfType<meetingRequestedNode>();
    It Can_move_to_clientDeclined = () => Check(process, process.clientDeclined);
    It Can_move_to_meeting1Arranged = () => Check(process, process.meeting1Arranged);
    It Can_move_to_meeting2Arranged = () => Check(process, process.meeting2Arranged);
    It Can_move_to_Reject = () => Check(process, process.Reject);
    It Cannot_move_to_any_other_state = () => AllOthersFalse(process);
}

No one ist sich völlig sicher, was der Ausgang für jeden Zustand und jede Reihe von Eingängen sein soll. Ich habe angefangen, Tests dafür zu schreiben. Ich muss jedoch etwas wie @ schreib 4320 tests (30 * 2 * 2 * 2 * 3 * 3 * 2).

Welche Vorschläge haben Sie zum Testen von Zustandsautomaten?

Bearbeiten Ich spiele mit allen Vorschlägen und werde eine Antwort markieren, wenn ich eine finde, die am besten funktioniert.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage