Jaki jest najlepszy sposób testowania spodziewanych błędów z usług WCF?Testowanie jednostki Błędy WCF
Próbuję przetestować usługę WCF, która jest (poprawnie) wyrzucaniem usterek w przypadku pewnego odtwarzalnego błędu. Testy jednostkowe pobierają instancję klienta WCF i wywołują odpowiednią metodę usługi, która wywołuje wyjątek FaultException.
Wszystko to działa tak, jak można by oczekiwać, ale mam trudności z testowaniem tego urządzenia, ponieważ błąd powoduje przerwanie IDE, gdy błąd nie zostanie wykryty podczas wdrażania usługi. Ponieważ używam błędów, a nie wyjątków, oczekiwałem, że IDE będzie serializować wyjątek i wysłać go do klienta, gdzie podniósłby wyjątek.
Widzę, że istnieje opcja konfiguracji wyłączania łamania dla konkretnych nieobsługiwanych wyjątków, ale miałem nadzieję, że ktoś może wskazać lepszy sposób osiągnięcia tych samych wyników, ponieważ nie jest to łatwe do zrealizowania w zespole środowisko.
Oto niektóre przykładowy kod z czego realizacja obecnie wygląda ...
Projekt Test jednostka ma odniesienie usługa mój usług WCF, a ja zdefiniowany interfejs, takie jak:
[OperationContract(Name = "DoSomething")]
[FaultContract(typeof(EpicFail))]
ResponseObject DoSomething(RequestObject requestObject);
usterka jest zdefiniowany jako takie:
[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;
}
}
Kod, który wywołuje usługę niejasno wygląda tak:
[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);
}
- edytowany kod, aby pokazać, że używam atrybut ExpectedException i nie wydaje się mieć większego wpływu na utrzymanie IDE/Debugger pękaniu, gdy jest wyjątek w serwisie.
Czy udostępniającym usługę WCF w tym samym procesie co testów jednostkowych, lub w oddzielnym procesie? –
Oddzielne procesy, usługa WCF jest hostowana za pośrednictwem IIS. Prowadzę testy jednostek lokalnie w trybie debugowania. Oba projekty są częścią tego samego rozwiązania. Myślę, że jeśli uruchomię usługę w trybie budowania, a urządzenie będzie testować w trybie debugowania, prawdopodobnie naprawi problem, ale to nie wydaje się lepszym rozwiązaniem niż opcja konfiguracji IDE. Nadal muszę coś zrobić dla wszystkich maszyna. – mattv
Czy masz IDE skonfigurowane tak, aby łamać wszystkie wyjątki? – Kristen