¿Cuál es la mejor manera de probar las fallas esperadas de los servicios de WCF?Pruebas unitarias Fallas WCF
Estoy intentando probar la unidad de un servicio WCF que está arrojando (correctamente) FaultExceptions por un cierto error reproducible. Las pruebas unitarias obtienen una instancia del cliente WCF y llaman al método de servicio aplicable, que arroja una FaultException.
Todo eso funciona como era de esperar, pero estoy teniendo dificultades para probarlo, porque la falla hace que el IDE se rompa cuando el error no se detecta en la implementación del servicio. Debido a que estoy usando fallas, y no excepciones, esperaba que el IDE serializara la excepción y la enviara al cliente, donde generaría una excepción.
Veo que hay una opción de configuración para deshabilitar el corte para excepciones específicas no manejadas por el usuario, pero esperaba que alguien pudiera señalar una mejor manera de lograr los mismos resultados, ya que esto no es factible en un equipo ambiente.
He aquí algunos ejemplos de código de lo que la puesta en práctica actualmente parece ...
El proyecto de prueba de unidad tiene una referencia de servicio a mi servicio WCF, y he definido la interfaz como por ejemplo:
[OperationContract(Name = "DoSomething")]
[FaultContract(typeof(EpicFail))]
ResponseObject DoSomething(RequestObject requestObject);
el fallo se define como tal:
[DataContract]
public class EpicFail
{
public EpicFail(string action)
{
this.Reason = "Epic Fail";
this.Action = action;
}
[DataMember]
public string Reason
{
get;
set;
}
[DataMember]
public string Action
{
get;
set;
}
}
el código que llama al servicio parece vagamente a esto:
[TestMethod()]
[ExpectedException(typeof(FaultException<EpicFail>))]
public void FaultTest_Fails_Epicly()
{
bool testPassed = false;
try
{
ResponseObject resp = GetServiceClient().DoSomething(req);
}
catch (FaultException<EpicFail>)
{
testPassed = true;
}
Assert.IsTrue(testPassed);
}
- he editado el código para mostrar que estoy usando el atributo ExpectedException y no parece tener mucho efecto en mantener el IDE/depurador se rompa cuando la excepción se produce en el servicio.
¿Está aloja el servicio WCF en el mismo proceso que las pruebas unitarias, o en un proceso separado? –
Separados procesos, el servicio WCF se aloja a través de IIS. Estoy ejecutando localmente las pruebas unitarias en modo de depuración. Ambos proyectos son parte de la misma solución. Creo que si ejecuto el servicio en modo Build y la unidad prueba en modo Debug, probablemente arreglaría el problema, pero eso no parece una solución mejor que la opción de configuración IDE. Todavía es algo que tengo que hacer para todos. máquina. – mattv
¿Tiene el IDE configurado para romper todas las excepciones? – Kristen