Benötigen Sie Hilfe beim Zusammenstellen. (Angenommen, ich habe keinen TypeMock)Wie würden Sie diesen Code vereinigen?
Möchten Sie den Code ändern, um Mocks zu injizieren, um EndpointAddress, DiscoveryEndpoint, DiscoveryClient zu ersetzen?
Welche Art von Tests würden Sie schreiben? Ich kann mir
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);
}
alle Ihre Hilfe schätzen. Danke!
Ariel
Glauben Sie nicht, dass IoC die hier Abhängigkeiten der API verschmutzen würde? – ArielBH
Ehrlich nein. Der Code, den Sie haben, beruht auf anderen Komponenten in Ihrem System. Warum also nicht explizit dieses Vertrauen ausdrücken, indem man diese über den Konstruktor weitergibt? Wenn nichts anderes, können Sie diese Elemente manuell erstellen, aber selbst dann, wenn Sie es sind, würde ich die Verwendung von Fabriken in Betracht ziehen, um es für Sie zu tun. Bis zu Ihnen wirklich - Sie müssen nicht IOC verwenden, aber wenn Sie mit etwas mit irgendeiner Komplexität beschäftigen, dann würde ich es verwenden. – Simon
Simon, Danke. Refactoring jetzt. Ich werde von einer statischen API zurücktreten ... (Ich benutze einen IoC Container ...) – ArielBH