如何使用Visual Studio 2008对C#Web服务进行unit testing

您应该如何使用Visual Studio 2008在C#中对Web服务进行unit testing? 当我生成unit testing时,它会添加对Web服务类的实际引用,而不是Web引用。 它设置指定的属性:

http://msdn.microsoft.com/en-us/library/ms243399(VS.80).aspx#TestingWebServiceLocally

然而,它将在不执行测试的情况下完成。 我试图将调用添加到WebServiceHelper.TryUrlRedirection(...)但调用不喜欢目标,因为它inheritance自WebService ,而不是WebClientProtocol

我通常做的不是直接测试Web服务,而是尝试在服务中尽可能少地编写代码,并调用另一个完成所有实际工作的类。 然后我为其他类编写unit testing。 事实certificate,类有时在Web服务上下文之外是有用的,所以这样 – 你获得两次。

如果您正在编写Web服务,请尝试将所有逻辑放在另一个(可测试的)层中。 每个Web方法都应该有一些代码。 那么您没有理由直接测试Web方法,因为您可以测试底层。

 [WebMethod] public void DoSomething() { hander.DoSomething(); } 

如果您正在使用Web方法,请将生成的调用方包装在类包装器中,并为类包装器实现一个接口。 然后,只要您需要调用Web服务,请使用该接口来调用该方法。 您希望使用该接口,以便在测试期间使类包装器可交换(使用Rhino Mocks,Moq或TypeMock)。

您可以向unit testing项目添加服务引用,也可以生成客户端存根并将该类放入unit testing项目中。

我也有这个问题,所以我使用这个解决方法: http : //techkn0w.wordpress.com/2009/07/01/unit-testing-an-asmx-web-service-in-visual-studio-2008/

在我的web方法unit testing之上,我有以下内容:

 // TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example, // http://.../Default.aspx). This is necessary for the unit test to be executed on the web server, // whether you are testing a page, web service, or a WCF service. [HostType("ASP.NET")] [UrlToTest("http://localhost/MyWebService")] 

除了通常:

 [TestMethod()] [DeploymentItem("MyWebService.dll")] 

此代码来自使用Visual Studio 2008unit testing向导。

知道有两种类型的Web服务。 那些你自己写的,想要测试的,以及那些你消费的。 对于前者,适用上述规则。 但是,我想说有时我会看到开发人员针对外部Web服务进行测试。 逻辑规定第三方服务不可靠,因此需要更多测试。 在面向对象的编程中,最好理解Martin Fowler和其他人都告诉我们的关注点分离。 这意味着我们不应该测试我们自己的外部系统。

但是,我喜欢编写包装类来为服务提供有用的function。 例如,Bing Maps具有许多非常强大的function。 我对这些进行测试只是为了确保它们给我预期的值。 虽然不是很广泛,但它们的重点是,如果Web服务因任何原因而死(身份validation密钥到期等),那么我可以通过测试服务器通知它。