前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Owin Host实现脱离IIS跑Web API单元测试

用Owin Host实现脱离IIS跑Web API单元测试

作者头像
happlyfox
发布2019-03-14 16:52:11
9060
发布2019-03-14 16:52:11
举报
文章被收录于专栏:技术开源分享技术开源分享

当前文章阅读前推荐阅读 OwinSelfHost自宿主的使用 文章 操作步骤与上述文章结构大致雷同:

第一步 新建控制台项目&&安装Nuget包

Install-package Microsoft.AspNet.WebApi.OwinSelfHost

第二步 新建操作类

Startup.cs 对OwinHost 所需的webapi配置

代码语言:javascript
复制
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var configuraton = new HttpConfiguration();

            configuraton.MapHttpAttributeRoutes();

            app.UseWebApi(configuraton);
        }
    }

ApiController WebApi控制器的具体实例

代码语言:javascript
复制
   public class CommentsController : ApiController
    {
        [Route("blogposts/{postId}/comments")]
        public async Task<IHttpActionResult> Get(int postId)
        {
            var comments = new Comment[] { new Comment {
                PostId = postId,
                Body = "Coding changes the world1" } };
            return Ok<Comment[]>(comments);
        }
    }

    public class Comment
    {
        public int PostId { get; set; }
        public string Body { get; set; }
    }

新建测试类

CommentsWebApiTest 使用OwinHost的方法脱离IIS的WebApi测试类

代码语言:javascript
复制
    public class CommentsWebApiTest : IDisposable
    {
        private const string HOST_ADDRESS = "http://localhost:8001";
        private IDisposable _webApp;
        private HttpClient _httClient;
        public CommentsWebApiTest()
        {
            _webApp = WebApp.Start<Startup>(HOST_ADDRESS);
            Console.WriteLine("Web API started!");
            _httClient = new HttpClient();
            _httClient.BaseAddress = new Uri(HOST_ADDRESS);
            Console.WriteLine("HttpClient started!");
        }

        public void Dispose()
        {
            _webApp.Dispose();
        }

        [Fact]
        public async Task GetComments()
        {
            var postId = 1;
            var response = await _httClient.GetAsync($"http://localhost:8001/blogposts/1/comments");
            if (response.StatusCode != HttpStatusCode.OK)
            {
                Console.WriteLine(response.Content.ReadAsStringAsync());
            }
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            var comments = await response.Content.ReadAsAsync<Comment[]>();
            Assert.NotEmpty(comments);
            Assert.Equal(postId, comments[0].PostId);
            Assert.Equal("Coding changes the world1", comments[0].Body);
        }
    }

测试标签和类库引用

当使用测试标签的时候,[Fact],无法发现无法添加引用,如下图

图中所指示的地方如果出现引用问题,可以参照以下步骤进行引用 1.点击vs2017的工具->nuget包管理->解决方案的nuget程序包,在“”浏览“下输入“xunit”,选择xunit,然后选择步骤一中创建的项目,点击安装

2.其实此时的测试管理器根本就未运行单元测试,必须要借助xUnit中的运行环境,利用测试管理器来运行VS中的测试,此时我们继续在单元测试中通过NuGet安装xunit.runner.visualstudio, 点击vs2017的工具->nuget包管理->解决方案的nuget程序包,在“”浏览“下输入“xunit.runner.visualstudio”,选择xunit.runner.visualstudio,然后选择步骤一中创建的项目,点击安装

开始进行单元测试

编写单元测试代码后,右键点击“运行测试“”,即可执行单元测试,测试代码在后台直接运行,如果是点击“调试测试”,即可对测试单元进行断点调试

点击“运行测试”后会在Vs编辑器下方出现一个"测试资源管理器",在其中可以对所有的单元测试结果进行查看,如下图所示

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步 新建控制台项目&&安装Nuget包
  • 第二步 新建操作类
    • 新建测试类
      • 测试标签和类库引用
      • 开始进行单元测试
      相关产品与服务
      测试管理
      CODING 测试管理(CODING Test Management,CODING-TM)为您提供井然有序的测试协同管理工具服务,从测试用例库管理、制定测试计划,到协作完成测试任务,为测试团队提供敏捷测试工作方式,提高测试与研发团队的协同效率。提供可视化的工作视图以及数据报告,随时把控测试进度和规划。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档