c# - 用于单元测试 .NET 核心 MVC Controller 的模拟 HttpContext?

标签 c# asp.net-mvc unit-testing asp.net-core

我在 Controller 中有一个函数,我正在对其进行单元测试,该函数期望 http 请求 header 中的值。我无法初始化 HttpContext,因为它是只读的。

我的 Controller 函数需要“device-id”的 http 请求 header 值

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();

    //not valid controller.HttpContext is readonly
    //controller.HttpContext = new DefaultHttpContext(); 

    var result = controller.Get();
    Assert.AreEqual(result.Count(), 2);
}

有没有不使用第三方库的直接方法?

最佳答案

我能够以这种方式初始化 httpcontext 和 header :

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    controller.ControllerContext = new ControllerContext();
    controller.ControllerContext.HttpContext = new DefaultHttpContext();
    controller.ControllerContext.HttpContext.Request.Headers["device-id"] = "20317";
    var result = controller.Get();
    //the controller correctly receives the http header key value pair device-id:20317
    ...
}

关于c# - 用于单元测试 .NET 核心 MVC Controller 的模拟 HttpContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370077/

相关文章:

c# - 将 AutomationManagementClient 与 CertificateCloudCredentials 结合使用时出错

asp.net-mvc - 是否可以使用 MVC 引用另一个程序集中的 javascript 和 css 文件?

javascript - 大型模型的 API POST 调用,需要一些指导

c# - 验证摘要未显示 Controller 中生成的错误

java - Junit + Netbeans : Doesn't find methods inside class for test

php - 我如何在 Doctrine 2 中使用固定装置?

c# - 多层应用中模型的命名约定

c# - RSA key 对导入私钥异常

c# - MongoDb C# 驱动程序是否适用于 LINQ 和动态文档?

android - 如何模拟 JSONObject?