2009-12-01 2 views
19

ho un'istruzione switch in una fabbrica che restituisce un comando in base al valore della enum passato in qualcosa di simile:.Come unit test il caso di default di uno switch enum basato

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); 
    } 
} 

Io attualmente avere un interruttore per ogni valore nell'enum. Ho dei test unitari per ciascuno di questi casi. Come posso testare unitamente che il caso predefinito genera un errore? Ovviamente, al momento non posso passare in un EnumType sconosciuto ma chi dirà che questo non sarà cambiato in futuro. Posso comunque estendere o prendere in giro l'EnumType esclusivamente per il test dell'unità?

risposta

26

provare il seguente

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

E 'vero che qualsiasi valore si sceglie per il caso "default" potrebbe un giorno diventare un valore valido. Quindi aggiungi semplicemente un test per assicurarti che non si trovi nello stesso posto in cui controlli l'impostazione predefinita.

2

È possibile eseguire il cast del tipo sottostante dell'enumerazione sul tipo enum, per creare un valore "non valido".

Create((EnumType)200); 
7

È possibile trasmettere un valore errato al tipo di enum, che non viene verificato. Quindi se Val1 a Val3 sono da 1 a 3, ad esempio, passare:

(EnumType)(-1)