Besoin d'aide pour l'unification. (Supposons que je n'ai pas de TypeMock)Comment voulez-vous Unitest ce code?
Voulez-vous modifier le code afin d'injecter des substituts pour substituer EndpointAddress, DiscoveryEndpoint, DiscoveryClient?
Quel genre de tests écrivez-vous? Je peux penser à
GetService_ServiceExist_ResultShouldBeAnInstance
GetService_ServiceIsNotExist_ResultShouldNull
static public T GetService<T>(Binding binding, string address)
{
Contract.Requires(binding != null);
Contract.Requires(!string.IsNullOrWhiteSpace(address));
var endpointAddress= new EndpointAddress(address);
var discoveryEndpoint = new DiscoveryEndpoint(binding, endpointAddress);
var discoveryClient = new DiscoveryClient(discoveryEndpoint);
try
{
// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(new FindCriteria(typeof(T)));
Contract.Assume(findResponse != null);
Contract.Assume(findResponse.Endpoints != null);
// Check to see if endpoints were found, if so then invoke the service.););
if (findResponse.Endpoints.Count > 0)
{
Contract.Assume(findResponse.Endpoints[0] != null);
return ChannelFactory<T>.CreateChannel(new BasicHttpBinding(),
findResponse.Endpoints[0].Address);
}
}
catch (TargetInvocationException ex)
{
Console.WriteLine("This client was unable to connect to and query the proxy. Ensure that the proxy is up and running: " + ex);
}
return default(T);
}
Appréciez toute votre aide. Merci!
Ariel
Ne pensez-vous pas que les dépendances IoC ici pourraient polluer l'API? – ArielBH
Sincèrement non. Le code que vous avez repose sur d'autres composants de votre système. Alors pourquoi ne pas exprimer explicitement cette confiance en les passant par le constructeur? Si rien d'autre, vous pouvez créer manuellement ces éléments, mais même alors, si vous êtes je envisagerais d'utiliser des usines pour le faire pour vous. Jusqu'à vous vraiment - vous n'avez pas besoin d'utiliser IOC, mais si vous avez affaire à quelque chose de complexe, alors je l'utiliserais. – Simon
Simon, merci. Refactoring maintenant. Je vais prendre du recul à partir d'une api statique ... (btw j'utilise un conteneur IoC ...) – ArielBH