我们正在通过asp.net mvc路由公开我们的应用程序的wcf SDK,如下面的RouteConfig所示。我们还利用服务参考客户端项目为我们的应用程序调用其他应用程序的SDK。
有没有办法在Visual Studio Test Assembly / Class中托管SDKService,以便我们可以在Service Reference客户端和SDKService之间编写测试验证通信?
SDKService的依赖关系是可以提供模拟的所有接口。 SDKService本身包含测试。
如果这是一个重复的问题,我道歉。我在这里以及网络上阅读的每篇帖子都说'#34;测试客户端没有任何价值,因为您只是在测试配置。"这一切都很好,但是,如果在SDKService传递或返回的模型之一上添加,删除或更改属性,则需要更新服务引用。
我们希望能够进行测试,以防止我们在不更新其相关服务参考的情况下对与SDKService关联的代码进行更改。因此,我们希望能够测试服务和服务参考之间的通信。
感谢您提出可能导致解决方案的任何想法或想法。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
if (AppSettings.EnableIntegration)
routes.Add(new ServiceRoute("sdk", new IntegrationHostFactory()
{
BindingConfigurationName = "sdkInName",
ServiceContractType = typeof(ISdk),
ErrorHandler = new ExceptionHandler(),
HttpConfig = GlobalConfiguration.Configuration
}, typeof(SDKService)));
);
}
}
服务合同
using System.Collections.Generic;
using System.IO;
using System.ServiceModel;
[ServiceContract]
public interface ISdk
{
[OperationContract]
string GetIceCream();
[OperationContract]
IEnumerable<string> GetFlavors();
}
实施
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.ServiceModel;
using System.Threading;
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
ConcurrencyMode = ConcurrencyMode.Single)]
public class SDKService : ISdk
{
public string GetIceCream(string id)
{
return "Moose Tracks";
}
IEnumerable<string> GetFlavors()
{
return new List<string> { "Moose Tracks", "Chocolate Chip",
"Vanilla", "Black Jack Cherry" };
}
}
的Web.config
<system.serviceModel>
<services>
<service name="IceCream.Application.SDKService" />
</services>
<bindings configSource="configuration\WCF-Bindings.config" />
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials useIdentityConfiguration="true" />
<serviceAuthorization principalPermissionMode="Always" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<diagnostics>
<messageLogging logMessagesAtServiceLevel="false"
logMalformedMessages="false" logKnownPii="false"
logEntireMessage="false" />
</diagnostics>
</system.serviceModel>