2009-12-01 1 views
19

ich eine switch-Anweisung in einer Fabrik haben, die einen Befehl gibt basierend auf dem Wert der Enumeration übergeben So etwas wie:.Wie Einheit testen Sie die Standardfall eines ENUM-basierten Switch-Anweisung

public ICommand Create(EnumType enumType) 
{ 
    switch (enumType) 
    { 
     case(enumType.Val1): 
     return new SomeCommand(); 
     case(enumType.Val2): 
     return new SomeCommand(); 
     case(enumType.Val3): 
     return new SomeCommand(); 
     default: 
     throw new ArgumentOutOfRangeException("Unknown enumType" + enumType); 
    } 
} 

ich zur Zeit habe für jeden Wert in der Enumeration einen Schalterfall. Ich habe Komponententests für jeden dieser Fälle. Wie kann ich testen, ob der Standardfall einen Fehler verursacht? Offensichtlich kann ich im Moment keinen unbekannten EnumType eingeben, aber wer wird sagen, dass dies in Zukunft nicht geändert wird. Kann ich den EnumType auch nur aus Gründen des Unit-Tests verlängern oder verspotten?

Antwort

26

die

Assert.IsFalse(Enum.IsDefined(typeof(EnumType), Int32.MaxValue); 
Create((EnumType)Int32.MaxValue); 

Es stimmt folgenden Versuchen Sie, dass jeder Wert, den Sie für die „default“ Fall wählen Sie einen Tag ein gültiger Wert werden könnte. Fügen Sie einfach einen Test hinzu, um zu gewährleisten, dass er nicht an der gleichen Stelle wie der Standard aussieht.

2

Sie können den zugrunde liegenden Typ der Aufzählung in den Aufzählungstyp umwandeln, um einen "ungültigen" Wert zu erstellen.

Create((EnumType)200); 
7

Sie können einen falschen Wert in Ihren Enum-Typ umwandeln - dies wird nicht überprüft. Wenn also beispielsweise Val1 bis Val3 1 bis 3 sind, dann passiere:

(EnumType)(-1) 
Verwandte Themen