我在VS 2012中创建了一个WCF服务应用程序项目。已经完成了该服务。
这就是它的样子:
现在我有一个基本问题需要处理。我创建了一个新的测试项目来创建更多的TDD以及一些TAD测试。 TAD(实施后测试)测试将测试服务实现,而我的TDD测试将测试依赖于模拟我的WCF Servcie接口。
但现在回到我需要使用服务实现进行测试的TAD测试。我认为这是我在TAD的单元测试中添加服务引用和使用clientProxy。
所以我添加了一个新的C#项目的服务引用。然后我继续创建一些测试,例如:
[TestMethod]
public void Get_CalledViaClientProxy_ReturnsNonNullList()
{
var serviceClient = new CarsClient();
// Act
Cars[] events = serviceClient.Get();
// Assert
Assert.IsNotNull(events);
}
当我运行它时失败,因为实际服务没有运行。所以我所做的就是回到实际的Service WCF项目,右键单击服务(.svc)并选择在浏览器中打开它,它也将在IIS Express下启动服务。然后我的测试运行良好。
因此,如何使其更加自动化。如果另一个开发人员下载此代码,则应运行这些测试并以某种方式启动服务。我尝试将我的服务项目设置为启动项目,但所有这一切都会打开浏览器以显示该项目的文件系统。
人们如何运行除IIS以外的测试服务?并使其适用于开发者?如果我不能简单地运行我的服务但是以某种方式按F5并且仍然可以返回我的测试项目以尝试运行单元测试,那么这是毫无意义的。
当我只是尝试设置我的" WCF服务应用程序"将项目作为启动项目,而不仅仅是启动服务并坐在控制台窗口中,它会打开服务的网页。我有错误的WCF项目类型吗?我注意到我有一个网页标签,因为我有一个"服务应用程序"项目,如果我想在VS中启动我的项目并继续编写其他利用此运行服务的项目,我应该使用其他东西吗?
在我以前的一家公司,我们都放了一个" -d"在WCF服务项目中,当你运行项目时,它将启动服务并且控制台窗口将运行并且只是坐在那里,然后你知道服务正在运行,而你继续编写针对它的TAD单元测试
e.g:
然而,我的WCF项目是一个" WCF应用服务"所以我没有在我的确切的调试选项卡,所以不知道该怎么做,然后我们如何能够在我曾经在其他地方的WCF服务中使用这种格式的选项卡。也许它只是一个简单的C#项目,而不是我们放置-d的WCF项目,但是如果是这样的话,它是如何启动WCF服务的呢?不确定它是否是一个简单的vanilla C#项目,我们把它放在-d中,但我确定在我的WCF服务应用程序项目中没有相同的选项卡格式。
更新#2
好的我只是看到差异,添加了一个" WCF服务库"项目与我的" WCF服务应用程序"项目。该选项卡现在具有该调试功能,现在当我启动它时它会启动服务并且测试客户端启动,因为VS模板自动具有/client:" WCfTestClient.exe" in用于项目属性中调试选项卡的命令行属性。
由于此服务将用作跨应用程序使用的服务API,因此我可能不应该使用" WCF服务应用程序"并且应该使用" WCF服务库" WCF项目模板的类型。
答案 0 :(得分:2)
从与测试项目相同的解决方案中引用您的wcf项目。
右键点击解决方案 - >设置启动项目 选择多个启动项目并将wcfservice的操作从none更改为启动或启动而不进行调试。玩和测试:)
或者在没有调试的情况下启动项目,wcf服务将运行,您可以继续编码/构建和测试。
修改强>
以下是你也可以做的事情;
将您的wcf项目更改为wcf服务库,确保此项目具有以下配置...
在调试下:
开始操作:启动项目 启动选项:命令行参数:/client:“WTfTestClient.exe”
在wcf选项下:
检查“在同一解决方案中调试另一个项目时启动wcf服务主机”
在解决方案下 - >启动项目,确保您有一个启动项目。 通过这种方式,您可以在解决方案中调试其他项目,visual studio将确保您的wcf服务已启动。
答案 1 :(得分:2)
通过从Visual Studio配置项目设置,您可以自动在本地IIS中托管服务。然后,无论何时编译WCF服务,IIS托管实例都将更新并准备好自动提供。
右键单击您的WCF服务项目 - >属性 - >网络 - >使用本地IIS Web服务器并单击“创建虚拟目录”。以前,如果没有,请不要忘记打开计算机上的IIS服务功能。
此外,为什么不仅仅通过引用它来测试您的具体服务实现,您不需要运行服务并连接它来测试您的业务。
答案 2 :(得分:0)
通常你把WCF服务逻辑放在其他项目中,比如说“WCF登录库”,然后测试它的功能。您不需要wcf服务来测试这些方法调用。然后,您只能使用一种方法来测试与WCF的连接(通常由我手动完成)。
这不是那么简单吗?