2009-12-01 21 views
19

tengo una sentencia switch en una fábrica que devuelve un comando basado en el valor de la enumeración aprobada en algo como:.Como unidad de probar el caso predeterminado de una sentencia switch basada enumeración

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

que actualmente tener un caso de interruptor para cada valor en la enumeración. Tengo pruebas unitarias para cada uno de estos casos. ¿Cómo pruebo la unidad que el caso predeterminado arroja un error? Obviamente, en este momento no puedo pasar un EnumType desconocido, pero quién puede decir que esto no cambiará en el futuro. ¿De todos modos puedo extender o burlar el EnumType puramente por el bien de la prueba unitaria?

Respuesta

26

intente lo siguiente

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

Es cierto que cualquier valor que elija para el caso "default" podría convertirse algún día en un valor válido. Así que simplemente agregue una prueba para garantizar que no en el mismo lugar donde verifica el valor predeterminado.

2

Puede convertir el tipo subyacente de la enumeración en el tipo de enumeración, para crear un valor "no válido".

Create((EnumType)200); 
7

Puede asignar un valor incorrecto a su tipo de enumeración - esto no marca. Por lo tanto, si Val1 a Val3 son 1 a 3, por ejemplo, pase:

(EnumType)(-1) 
Cuestiones relacionadas