代码之家  ›  专栏  ›  技术社区  ›  Steven Behnke

如何使用Visual Studio 2008对C Web服务进行单元测试

  •  11
  • Steven Behnke  · 技术社区  · 16 年前

    如何使用Visual Studio 2008在C中对Web服务进行单元测试?当我生成单元测试时,它会向Web服务类添加一个实际引用,而不是Web引用。它设置在中指定的属性:

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

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

    6 回复  |  直到 14 年前
        1
  •  24
  •   Doron Yaacoby ICR    16 年前

    我通常做的不是直接测试Web服务,而是尝试在服务中尽可能少地输入代码,并调用一个完成所有实际工作的不同类。然后我为另一个类编写单元测试。事实证明,在Web服务上下文之外,类有时是有用的,因此,通过这种方式,您可以获得两倍的收益。

        2
  •  8
  •   Jason Plank Maksim Kondratyuk    14 年前

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

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

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

        3
  •  1
  •   JoshBerke    16 年前

    您可以向单元测试项目添加服务引用,或者生成客户机存根并将类放入单元测试项目中。

        4
  •  1
  •   Ra.    15 年前
        5
  •  0
  •   Sarah Vessels    16 年前

    在我的Web方法单元测试之上,我有以下内容:

    // 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 2008单元测试向导。

        6
  •  0
  •   csharpforevermore    14 年前

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

    但是,我喜欢编写包装类来针对服务提供有用的功能。例如,必应地图具有许多惊人的强大功能。我编写这些测试只是为了确保它们给了我期望的值。虽然不是很广泛,但它们的要点是,如果Web服务因任何原因(身份验证密钥过期等)而死亡,那么可以通过测试服务器通知我。