首页 > 其他分享 >测试

测试

时间:2022-12-13 17:45:03浏览次数:37  
标签:httpContextAccessor HTTP TestServer void 测试 public

测试含有HTTP上下文的业务逻辑,比如Cookie、URL中的QueryString
在平时的代码过程中,常常会和HTTP上下文HttpContext打交道,最常见的如request、response、cookie、querystring等,比如我们新的逻辑:

public class UserService

{

    private IHttpContextAccessor _httpContextAccessor;

    public UserService(IHttpContextAccessor httpContextAccessor)

    {

        _httpContextAccessor = httpContextAccessor;

    }

    public bool IsLogin()

    {

        return _httpContextAccessor.HttpContext.Request.Cookies["username"] != null;

    }

}

这时如何测试呢?马丁福勒在他的大作《企业应用架构模式》中明确指出“测试桩”的概念,来应对这种情况。各种Mock框架应运而生。比如我最喜欢的Moq:

public class TestCookie

{

    private UserService _service;

    [SetUp]

    public void Init()

    {

        var httpContextAccessorMock = new Mock<IHttpContextAccessor>();

        httpContextAccessorMock.Setup(x => x.HttpContext.Request.Cookies["username"]).Returns("yubaolee");

        var server = new TestServer(WebHost.CreateDefaultBuilder()

            .ConfigureServices(u =>u.AddScoped(x =>httpContextAccessorMock.Object))

            .UseStartup<Startup>());

        _service = server.Host.Services.GetService<UserService>();

    }

    [Test]

    public void TestLogin()

    {

        bool result = _service.IsLogin();

        Assert.IsTrue(result);

    }

}

测试一次HTTP请求
有时我们需要测试Mvc框架的模型绑定,看看一次客户端的请求是否能被正确解析,亦或者测试WebAPI入口的一些Filter AOP等是否被正确触发,这时就需要测试一次HTTP请求。从严格意义上来讲这种测试已经脱离的单元测试的范畴,属于集成测试。但这种测试代码可以节省我们大量的重复劳动。asp.net core中可以通过TestServer快速实现这种模拟:

public class TestHttpRequest

{

    private TestServer _testServer;

    [SetUp]

    public void Init()

    {

        _testServer = new TestServer(WebHost.CreateDefaultBuilder().UseStartup<Startup>());

    }

    [Test]

    public void TestLogin()

    {

        var client = _testServer.CreateClient();

        var result = client.GetStringAsync("/api/values/checklogin?name=yubao&password=yubao");

        Console.WriteLine(result.Result);

    }

}

标签:httpContextAccessor,HTTP,TestServer,void,测试,public
From: https://www.cnblogs.com/renfeng/p/16979455.html

相关文章

  • 1、什么是软件测试
    1、什么是软件测试?检查软件产品是否符合设计的要求确认软件产品是否符合用户的实际需求提供软件产品的质量信息投入较低的成本保障极大的降低劣质产品验证......
  • 2、测试与开发模型
    1、需求分析阅读需求文档,产品文档,产品详细设计说明书分析需求的点参与需求评审快速熟悉项目2、制定测试计划和测试方案测试计划:测试整个项目的总体规划......
  • 压力测试 —— K6
    链接:APITestusingK6 InstallK6: K6Orusedockerimage repo.bgc.slb.com:8083/cloud-infrastructure-operation/base/thirdparty/k6:0.37.0  Runningk6 K......
  • git小测试
    git服务器yum-yinstallgit安装git仓库[root@localhost~]#su-git上一次登录:二10月1112:48:43CST2022pts/1上[git@localhost~]$mkdircanku[git@loca......
  • Linux MTD测试程序
    /**filename:program.c*description:demoofprogramFPGAapplication*date:2015-10-13*compiler:ARCH=armCROSS_COMPILE=arm-fsl-linux-gnueabi-make*/#includ......
  • Unity Hex Map技术测试
    HexMap常用于战棋的地形,最近有这方面的需求,做一个简单的测试,从画一个正六边形开始。0x00.正六边形如上图所示,两个圆,可以很规范的画一个六变形。外圆半径定为:​​publicco......
  • 【测试】JMeter调用存储过程
    JMeter是可以直接调用SQL语句或者存储过程来完成测试的,这次就给大家讲一下如何通过调用MySQL存储过程完成测试。首先我们先创建一个数据库连接池的配置信息:如上图所示,已填写......
  • 智能座舱的测试验证
    ......
  • 基于TSUNG对MQTT进行压力测试-基础概念温习
    ​一、TCP报头部中的SYN、FIN、ACK:ACK :TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。SYN(SYNchronization):在连接建立时用来同步序号。当SY......
  • 微信支付测试OK。
    前期准备:商户登陆后:安装证书,设置API密钥下载密钥,准备好各种APPID,KEY,替换到WxPay.Config.php公众平台:微信支付-测试授权目录:http://www.aabb.com/mobile/payjsapitest......