使用Microsoft.AspNetCore.TestHost进行完整的功能测试

发表于:2018-9-25 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:huanent    来源:博客园

分享:
  简介
  Microsoft.AspNetCore.TestHost是可以用于Asp.net Core 的功能测试工具。很多时候我们一个接口写好了,单元测试什么的也都ok了,需要完整调试一下,检查下单元测试未覆盖到的代码是否有bug。步骤为如下:程序打个断点->F5运行->通常需要登录个测试账号->查找要调试api的入口->获得断点开始调试=>代码报错?很多时候需要停止调试修改->回到第一步。如此反复循环,做着重复的工作,Microsoft.AspNetCore.TestHost正是为了解决这个问题,它可以让你使用xTest或者MSTest进行覆盖整个HTTP请求生命周期的功能测试。
  进行一个简单的功能测试
  新建一个Asp.net Core WebApi和xUnit项目
   
  ValuesController里面自带一个Action
   
  我们在xUnit项目里面模拟访问这个接口,首选安装如下nuget包:
  Microsoft.AspNetCore.TestHost
  Microsoft.AspNetCore.All(很多依赖懒得找的话直接安装这个集成包,百分之90涉及到AspNetCore的依赖都包含在里面)
  然后需要引用被测试的AspnetCoreFunctionalTestDemo项目,新建一个测试类ValuesControllerTest
   
  将GetValuesTest方法替换为如下代码,其中startup类是应用自AspnetCoreFunctionalTestDemo项目
  [Fact]
  public void GetValuesTest()
  {
  var client = new TestServer(WebHost
  .CreateDefaultBuilder()
  .UseStartup<Startup>())
  .CreateClient();
  string result = client.GetStringAsync("api/values").Result;
  Assert.Equal(result, JsonConvert.SerializeObject(new string[] { "value1", "value2" }));
  }

  此时在ValueController打下断点
   
  运行GetValuesTest调试测试
   
  成功进入断点,我们不用启动浏览器,就可以进行完整的接口功能测试了。
  修改内容目录与自动授权
  上面演示了如何进行一个简单的功能测试,但是存在两个缺陷:
  webApi在测试的时候实际的运行目录是在FunctionalTest目录下
  对需要授权的接口不能正常测试,会得到未授权的返回结果
  1.内容目录
  我们可以在Controller的Get方法输出当前的内容目录
   
  内容目录是在测试x项目下这与我们的预期不符,如果webapi项目对根目录下的文件有依赖关系例如appsetting.json则会找不到该文件,解决的办法是在webHost中手动指定运行根目录

    上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号