C# 如何对WCF项目进行集成测试?

C# 如何对WCF项目进行集成测试?,c#,.net,tfs,C#,.net,Tfs,我一直在开发一个WCF项目,该项目将公开公司外部客户将使用的web服务(基于HTTP)。我计划使用TFS 2010进行持续集成 我想做持续集成和集成测试 我的问题是: -进行集成测试是否意味着我必须创建一个模拟生产环境的测试环境? -或者,这是否意味着我必须开始从我的单元测试工具调用我的WCF、数据库和其他对象,而不依赖于模拟?例如: [TestClass] public class ServiceIntegrationTest { private static ServiceHost

我一直在开发一个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)项目的教程?

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

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

[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
    GlobalBackend.EnsureStarted();
} 
我不知道网上有什么例子,你可能需要更多的谷歌搜索

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

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

编辑:您可能还需要清理/关闭数据库/服务:

MSDN第页,共页

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

[AssemblyInitialize()]
public static void AssemblyInit(TestContext context)
{
      GlobalBackend.EnsureStarted();
}
所以现在我记得更清楚了——我们最终做了这件事(代码更少)

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