4

我在 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 项目类型吗?我注意到我有一个 web 选项卡,因为我有一个“服务应用程序”项目,如果我想简单地在 VS 中启动我的项目并继续在使用此运行服务的其他项目中编码,我应该使用其他东西吗?

在我以前工作的一家公司,我们都在 WCF 服务项目中添加了一个“-d”,当您运行该项目时,它会启动该服务,并且会运行一个控制台窗口并坐在那里,然后您就知道该服务正在运行当您继续针对它编写 TAD 单元测试时

例如:

在此处输入图像描述

但是,我的 WCF 项目又是一个“WCF 应用程序服务”,所以我没有那个确切的调试选项卡,所以不知道该怎么做,然后我们如何能够在其他地方的 WCF 服务中使用这种格式的选项卡我去过。也许它只是一个普通的 C# 项目,而不是我们放置 -d 的 WCF 项目,但是如果是这样的话,它是如何启动 WCF 服务的呢?不确定它是否是我们放入 -d 的普通 C# 项目,但我确定在我的 WCF 服务应用程序项目中没有相同的选项卡格式。

更新#2

好的,我只是为了查看差异,在我的“ WCF 服务应用程序”项目旁边添加了一个“ WCF 服务库”项目。该选项卡现在具有该调试,现在当我启动它时,它确实启动了服务并且测试客户端出现,因为 VS 模板自动在项目中调试选项卡的命令行属性中包含 /client:"WcfTestClient.exe"特性。

由于该服务将用作跨应用程序使用的服务 API,也许我不应该使用“WCF 服务应用程序”,而应该使用“WCF 服务库”类型的 WCF 项目模板。

4

3 回答 3

2

您可以通过从 Visual Studio 配置项目设置来自动在本地 IIS 中托管您的服务。然后,无论何时编译 WCF 服务,IIS 托管实例都会更新并准备好自动提供服务。

右键单击您的 WCF 服务项目 -> 属性 -> Web -> 使用本地 IIS Web 服务器,然后单击创建虚拟目录。之前,如果没有,请不要忘记在您的机器上打开 IIS 服务功能。
此外,您为什么不仅通过引用它来测试您的具体服务实现,您不需要运行服务并连接它来测试您的业务。

于 2013-10-23T21:49:55.603 回答
2

从与您的测试项目相同的解决方案中引用您的 wcf 项目。

右键单击解决方案-> 设置启动项目选择多个启动项目并将您的 wcfservice 的操作从无更改为启动或不调试启动。玩和测试:)

或者在不调试的情况下启动项目,wcf 服务将运行,您可以继续编码/构建和测试。

编辑:

这是你也可以做的;

将您的 wcf 项目更改为 wcf 服务库,确保该项目具有以下配置...

调试中:

启动操作:启动项目启动选项:命令行参数:/client:"WcfTestClient.exe"

在 wcf 选项下:

勾选“在同一解决方案中调试另一个项目时启动 wcf 服务主机”

在解决方案 -> 启动项目下,确保您有一个启动项目。这样您就可以在解决方案中调试您的其他项目,Visual Studio 将确保您的 wcf 服务已启动。

于 2013-10-23T21:46:28.860 回答
0

通常,您将 WCF 服务逻辑放在其他项目中,比如“WCF 登录库”,然后在上面测试功能。您不需要 wcf 服务来测试这些方法调用。然后,您只能使用一种方法来测试与 WCF 的连接(通常由我手动完成)。

这不是更简单的方法吗?

于 2013-10-23T21:47:05.623 回答