gpt4 book ai didi

c# - 依赖于 HttpContext 的单元测试

转载 作者:行者123 更新时间:2023-12-04 00:33:16 26 4
gpt4 key购买 nike

我需要测试一些依赖于当前上下文的静态方法。现在,我当然可以使用 HttpContextWrapper 从我自己的代码中删除这种依赖性。问题在于我在这些方法中使用的第 3 方 API。他们依赖于 HttpContext,所以我对此无能为力。但是,我想要做的是使用我的 HttpContextBase 设置 HttpContext

所以我的代码看起来像这样:

public static bool IsSignedUpUser()
{
//This calls IsSignedUpUser with the production context
return IsSignedUpUser(new HttpContextWrapper(HttpContext.Current));
}

public static bool IsSignedUpUser(HttpContextBase context)
{
HttpCookie objCookie = SomeExternalAPIThatReliesOnHttpContextBeingSet();

return (objCookie != null)
}

我想做的是:

HttpContext.Current = context; //where context is a mocked HttpContextBase

这样,当第 3 方 API 在 HttpContext 中查找查询字符串、cookie 值等时,它不会抛出 NullReferenceException

为什么这不是骗局?

在被引用为欺骗的问题的代码中,作者看起来完全可以控制,没有外部依赖。我正在使用依赖于 HttpContext 的第三方库,我无法更改它们的方法签名以接受 HttpContextBase 所以我需要一种方法来分配我的 HttpContextBaseHttpContext

如果这是不可能的,到目前为止我被引导相信它不是,那么好的答案应该建议如何删除这些依赖项。 500 - 内部服务器错误至少有一个好的建议。

最佳答案

在我看来,你应该用你注入(inject)的自定义接口(interface)方法替换对 SomeExternalAPIThatReliesOnHttpContextBeingSet 的调用,然后可以像其他任何方法一样模拟它。

关于c# - 依赖于 HttpContext 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com