Domanda

Ho un'applicazione che invia messaggi a un servizio web esterno.Costruisco e distribuisco questa applicazione utilizzando MSBuild E Cruisecontrol.NET.Quando CCNET crea e distribuisce l'app, esegue anche una serie di test utilizzando NUnità.Ora vorrei testare anche la comunicazione del servizio web.

La mia idea è che come parte del processo di creazione venga generato un servizio Web (basato sui servizi Web esterni WSDL) e distribuito sul server Web locale dei server di creazione.Tutto ciò che il servizio Web dovrebbe fare è ricevere il messaggio e inserirlo nel file system in modo da poterlo controllare utilizzando, ad esempio, la normale NUnit.Ciò renderebbe anche più semplice lo sviluppo in quanto i nuovi sviluppatori dovrebbero solo eseguire lo script di compilazione ed essere attivi e funzionanti (senza dover dedicare tempo a impostare una connessione al servizio di terze parti).

Ci sono servizi esistenti là fuori che prendono facilmente in giro un servizio web basato su WSDL?Chiunque hai fatto qualcosa di simile usando MSBuild?

Ci sono altri modi per testare questo scenario?

È stato utile?

Soluzione

Ho appena iniziato a indagare http://www.soapui.org/ e sembra che funzionerà bene per testare i servizi web.

Inoltre, forse prova ad aggiungere un livello di astrazione nel tuo servizio web, ogni chiamata al servizio chiamerebbe direttamente un metodo testabile (al di fuori dell'ambito web)?L'ho appena fatto con un progetto più grande su cui sto lavorando e la sua testabilità funziona bene.

Altri suggerimenti

In generale, un ottimo modo per testare cose come queste è usare oggetti finti.

Al lavoro utilizziamo il prodotto TipoMock per testare cose come la comunicazione del servizio Web e altre dipendenze esterne.Costa dei soldi, quindi per questo motivo potrebbe non essere adatto alle tue esigenze, ma penso che sia un prodotto fantastico.Posso dirti per esperienza personale che si integra molto bene con NUnit e CCNet.

Ha una sintassi molto semplice in cui fondamentalmente dici "quando viene chiamato questo metodo/proprietà, voglio che tu restituisca questo valore". È ottimo per testare cose come errori di rete, file non presenti e, naturalmente, servizi web.

Dare un'occhiata a NMock2.È un prodotto beffardo open source e consente di creare implementazioni "virtuali" per interfacce che supportano un'interazione ricca e profonda.

Ad esempio, se la tua interfaccia WS viene chiamata IService e ha un Data GetData() metodo, puoi creare un mock che richiede che il metodo venga chiamato una volta e ne restituisce un nuovo Data oggetto:

var testService = mockery.NewMock<IService>();
Expect
    .Once
    .On(testService)
    .Method("GetService")
    .WithNoArguments()
    .Will(
        Return.Value(new Data());

Al termine della prova chiamare mockery.VerifyAllExpectationsHaveBeenMet() per assicurare che il GetData il metodo è stato effettivamente chiamato.

PS:non confondere il progetto "NMock2" con "NMock RC2", chiamato anche "nmock2" su sourceforge.Il progetto NMock2 sembra aver sostituito NMock.

Potrebbe anche trattarsi di qualcosa... L'uccello beffardo.Sembra utile.

Nel mio posto di lavoro stiamo utilizzando Typemock E nUnità per i nostri test unitari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top