【问题标题】:How to do Integration testing for a WCF project?如何对 WCF 项目进行集成测试?
【发布时间】:2011-02-09 05:44:52
【问题描述】:

我一直在开发一个 WCF 项目,该项目将公开 Web 服务(基于 HTTP),供公司外部的客户使用。我打算使用 TFS 2010 进行持续集成。

我想做持续集成和集成测试。

我的问题是:

-进行集成测试是否意味着我必须创建一个模拟生产环境的测试环境? -或者这是否意味着我只需开始从我的单元测试工具调用我的 WCF、数据库和其他对象而不依赖于模拟?例如:

[TestClass]
public class ServiceIntegrationTest
{
    private static ServiceHost serviceHost;

    [ClassInitialize]
    public static void MyClassInitialize(TestContext testContext)
    {
        serviceHost = new ServiceHost(typeof(Service1), new [] { new Uri("http://127.0.0.1:8001/") });
        serviceHost.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "Service1");
        serviceHost.Open();
    } 

-我真的不明白如何执行此操作。 - 是否有关于如何执行此操作的真实世界 .NET (WCF) 项目的教程?

【问题讨论】:

    标签: c# .net tfs


    【解决方案1】:

    我不是如何正确分解单元测试与模拟和其他方面的专家,但我可以分享我使用 WCF/数据库后端进行集成测试的经验。

    基本上,我们使用单例来处理所有启动代码。换句话说,MyClassInitialize 方法将调用一个静态方法,以确保服务主机/数据库已启动并运行。这样,我们就不必为每组单元测试设置/拆除后端。

    [ClassInitialize]
    public static void MyClassInitialize(TestContext testContext)
    {
        GlobalBackend.EnsureStarted();
    } 
    

    我不知道任何在线示例,您可能需要为此做更多的谷歌搜索。

    至于编写测试的粒度,您谈到了集成测试。听起来您可能想测试附加到真实数据库的服务调用。假设您的服务中包含一些 CRUD 功能,一个单元测试(在此上下文中为集成测试)可能会创建一个小部件(或其他),然后执行 loadWidget 调用以确保正确创建小部件。

    在一个单元测试中要做多少测试(取决于你是在做集成测试还是更细粒度的单元测试)是一个可以写很多书的主题。

    编辑:您可能还需要对数据库/服务进行一些清理/关闭:

    AssemblyCleanup attribute 上的 MSDN 页面。

    [AssemblyCleanup()]
    public static void AssemblyCleanup()
    {
       GlobalBackend.ShutDown();
    }
    

    当然,这可能导致只将所有启动代码放入:

    [AssemblyInitialize()]
    public static void AssemblyInit(TestContext context)
    {
          GlobalBackend.EnsureStarted();
    }
    

    所以现在我记得更清楚了——我们最终这样做了(更少的代码)

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多