我一直在开发一个WCF项目,它将公开web服务(基于HTTP),这些服务将被公司外部的客户使用。我计划使用TFS2010进行持续集成。
我想做持续集成和集成测试。
我的问题是:
-does做集成测试意味着我必须创建一个模拟生产环境的测试环境?-OR这是否意味着我只需从我的单元测试工具开始调用我的WCF、数据库和其他对象,而不依赖于mock?例如:
[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();
}
-I真的不知道该怎么做。在现实世界的.NET (WCF)项目中,有没有关于如何实现这一点的教程?
发布于 2011-02-09 05:33:19
我不是如何使用mock和其他工具正确分解单元测试的专家,但我可以分享我在使用WCF /a数据库后端进行集成测试方面的经验。
基本上,我们使用一个单例来处理所有的启动代码。换句话说,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();
}
所以现在我记得更清楚了--我们最终做到了这一点(代码更少)。
https://stackoverflow.com/questions/4938583
复制相似问题