我在 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 项目模板。