什么是集成测试基于ASP.NET MVC构建的api的正确方法?

时间:2011-05-16 18:26:59

标签: c# api asp.net-mvc-3 integration-testing oauth-2.0

我正在构建一个使用OAuth2的api。我已经成功地对所有单件进行了单元测试,但现在我需要进行一些集成测试。基本上我希望能够检查来自服务器的http响应,以确保一切正常。理想情况下,我希望能够在Visual Studio中启动Web开发服务器来托管站点,然后向它发出一堆请求并检查结果。

这样做的最佳方法是什么?我应该使用哪些工具?

2 个答案:

答案 0 :(得分:2)

我建议您在临时服务器上部署应用程序(甚至可能作为构建过程的一部分,这样只需单击按钮),然后针对此服务器触发HTTP客户端请求,这是真实的方式.NET客户端应该使用您的API。

答案 1 :(得分:2)

创建持续集成服务器

  1. 安装TeamCity
  2. 安装Ruby
  3. 安装Albacore
  4. 使用rake脚本执行以下操作 1.从源代码管理中签出文件 2.本地建设 3.将api部署到本地iis 4.对localhost api运行集成测试

    这听起来很熟悉。见here

    以下是我的API集成测试的示例。如果您需要更多详细信息,请与我们联系。

    我正在使用mspec。

    我运行它aganst localhost,我们的登台服务器和我们的生产服务器(一组有限的测试),以确保所有http连接正常工作。

    public class _GET_no_criteria : specs_for_endpoint_test
    {
        Establish context = () =>
        {
            Uri = C.Endpoint;
            Querystring = "";
            ExecuteJsonGetRequest();
    
            SetValidId();
        };
    
        It should_have_status_code_200_ok =()=>
            IsHttp_200OK();
    
        It should_have_categories = () =>
        {
            responseText.ShouldNotBeEmpty();
            PutsAll(responseText);
        };
    }
    

    来自基类

     public static void ExecuteGetRequest(string contentType)
            {
                httpcontext = HttpContext.Current;
                request = (HttpWebRequest)WebRequest.Create(BaseUri + Uri + Querystring);
                request.Method = C.HTTP_GET;          
                request.ContentType = contentType;
                request.Headers[C.AUTHORIZATION] = token;
    
                // GetResponse reaises an exception on http status code 400
                // We can pull response out of the exception and continue on our way            
                try
                {
                    response = (HttpWebResponse)request.GetResponse();
                }
                catch (WebException ex)
                {
                    response = (HttpWebResponse) ex.Response;
                }
    
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    responseText = reader.ReadToEnd();
                    reader.Close();
                } 
            }
    
            public static void ExecuteJsonGetRequest()
            {
                ExecuteGetRequest(C.CONTENT_JSON);
            }