Att integrationstesta WCF-tjänster
I en tidigare artikel skrev jag hur du kan isolera tjänsteimplementationen för att möjliggöra enhetstestning. Du kommer också behöva testa tjänsten i sin helhet eller åtminstone med flera enheter tillsammans.
Att köra manuella tester med hjälp av WCF Service Host och WCF Test Client är ett alternativ för att testa tjänsten i sin helhet. Manuella tester har sin plats i utvecklingscykeln men gapet mellan enhetstester och manuella tester bör fyllas med automatiserade integrationstester och funktionstester .
Då kommer vi till frågan hur vi på ett enkelt sätt kan husera WCF tjänsten och sedan exekvera de automatiserade testerna på den? Min rekommendation är att instansiera tjänstevärden inom ramen för din testklass (ServiceHost). För att slippa skriva all tråkig ServiceHost-kod nyttjer jag själv ett bibliotek som kallas ServiceModelEx skrivet av Juval Löwy. Det innehåller, bland mycket annat, klasser som förenklar konfigurering av WCF-värden. I sin absolut enklaste form räcker det med två rader kod; en rad för att instansiera tjänsten och öppna kanalen och en rad kod för att stänga kanalen och värden.
[TestClass]
public class when_process_is_successfully_invoked : ContextSpecification {
protected IMyService Service;
protected bool Result;
protected override void Context() {
//create instance and open ipc channel
Service = InProcFactory.CreateInstance<MyService, IMyService>();
}
protected override void Because() {
//execute integration test
Result = Service.Process();
}
[TestMethod]
public void should_return_true() {
//assert state
Assert.IsTrue(Result);
}
public override void Cleanup() {
//close channel
InProcFactory.CloseProxy(Service);
}
}
Så min rekommendation till dig är att surfa över till IDesign.net och ladda ned ServiceModelEx. Användandet av ServiceModelEx behandlas även i Juvals bok.