我们在开发服务时为了调试方便会在本地进行一个基本的模块测试,你也可以认为是集成测试,只不过你的测试用例不会覆盖到80%以上,而是一些我们认为在开发时不是很放心的点才会编写适当的用例来测试它。
  集成测试用例通常有多个执行上下文,对于我们开发人员来说我们的执行上下文通常都在本地,测试人员的上下文在测试环境中。开发人员的测试用来是不能够连接到其他环境中去的(当然视具体情况而定,有些用例很危险是不能够乱连接的,本文会讲如何解决),开发人员运行的集成测试用例所要访问的所有资源、服务都是在开发环境中的。这里依然存在但是,但是为了调试方便,我们还是需要能够在必要的时候连接到其他环境中去调试问题,为了能够真实的模拟出问题的环境、可真实的数据,我们需要能有一个这样的机制,在需要的时候我能够打开某个设置让其能够切换集成测试运行的环境上下文,其实说白了是你所要连接的环境、数据源的连接地址。
  本篇文章我们将通过一个简单的实例来了解如何简单的处理这中情况,这其实基于对测试用来不断重构后的效果。
1 using System;
2 using Microsoft.VisualStudio.TestTools.UnitTesting;
3
4 namespace OrderManager.Test
5 {
6     using ProductService.Contract;
7
8     /// <summary>
9     /// Product service integration tests.
10     /// </summary>
11     [TestClass]
12     public class ProductServiceIntegrationTest
13     {
14         /// <summary>
15         /// service address.
16         /// </summary>
17         public const string ServiceAddress = "http://dev.service.ProductService/";
18
19         /// <summary>
20         /// Product service get product by pid test.
21         /// </summary>
22         [TestMethod]
23         public void ProductService_GetProductByPid_Test()
24         {
25             var serviceInstance = ProductServiceClient.CreateClient(ServiceAddress);
26             var testResult = serviceInstance.GetProductByPid(0393844);
27
28             Assert.AreNotEqual(testResult, null);
29             Assert.AreEqual(testResult.Pid, 0393844);
30         }
31     }
32 }
  这是一个实际的集成测试用例代码,有一个当前测试类共用的服务地址,这个地址是DEV环境的,当然你也可以定义其他几个环境的服务地址,前提是环境是允许你连接的,那才有实际意义。
  我们来看测试用例,它是一个查询方法测试用例,用来对ProductServiceClient.GetProductByPid服务方法进行测试,由于面向查询的操作是等幕的,不论我们查询多少次这个ID的Product,都不会对数据造成影响,但是如果我们测试的是一个更新或者删除会带来问题。
  在DEV环境中,测试更新、删除用例没有问题,但是如果你的机器是能够连接到远程某个生产或者PRD测试上时会带来一定的危险性,特别是在忙的时候,加班加点的干进度,你很难记住你当前的机器的host配置中是否还连接着远程的生产机器上,或者根本不需要配置host能够连接到某个你不应该连接的环境上。
  这是目前的问题,那么我们如何解决这个问题呢 ,我们通过对测试代码进行一个简单的重构可以避免由于连接到不该连接的环境中运行危险的测试用例。