DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

[WCF] Esempio di Integration Test

Esistono molti strumenti e tecniche per effettuare un integration test di servizi WCF. Un modo che ho trovato molto semplice ed utile si ottiene sruttando il framework di unit testing di Visual Studio: infatti, utilizzando due metodi decorati rispettivamente con ClassInitialize e ClassCleanup possiamo gestire il ciclo di vita di un ServiceHost, evitando così il deploy preventivo (es. Cassini, IIS etc.) del servizio.
Nel seguente esempio viene mostrata questa tecnica supponendo di voler testare un servizio di autenticazione AuthenticationService che implementa un service contract IAuthentication, il quale definisce due metodi: Login(…) e Logout().


[TestClass]
public class AuthenticationUnitTest
{
 
private static ServiceHost _serviceHost;
 
private static string _address = "AuthenticationService";
 
private static string _baseAddress = "http://127.0.0.1:5656/";

  [ClassInitialize]
 
public static void ServiceHostInitialize(TestContext testContext)
 
{
   
_serviceHost = new ServiceHost(typeof(AuthenticationService), new[] { new Uri(_baseAddress) });
   
_serviceHost.AddServiceEndpoint(typeof(IAuthentication), new WSHttpBinding(), _address);
   
_serviceHost.Open();
 
}

 
[ClassCleanup]
 
public static void ServiceHostCleanup() { _serviceHost.Close(); }

 
[TestMethod]
 
public void AuthenticateUser()
 
{
   
string userName = "dario.santarelli";
   
string password = "password";

   
EndpointAddress endpointAddress = new EndpointAddress(string.Format("{0}{1}", _baseAddress,_address));
   
IAuthentication proxy = ChannelFactory<IAuthentication>.CreateChannel(new WSHttpBinding(), endpointAddress);

   
UserInfo userInfo = proxy.Login(userName, password);

   
Assert.IsNotNull(userInfo);
   
Assert.AreEqual(userInfo.Username, userName);

   
proxy.Logout(userName);           
  
}
}

 

Update: con questa tecnica non si intende sostituire il test in ambiente di produzione, bensì fornire un modo “base” per verificare il funzionamento di una WCF Service Library. Infatti, come si può notare, in questo caso sia lo UnitTest che il ServiceHost girano nello stesso AppDomain, il che NON garantisce by design il corretto comportamento del test come se fosse in produzione. Per avere test maggiormente efficaci, si consiglia l’utilizzo di soluzioni più “evolute” come WcfSvcHost o, meglio, direttamente un ambiente di test dedicato su IIS :D.


Technorati Tag: ,

Print | posted on Saturday, January 31, 2009 4:22 PM | Filed Under [ WCF ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET