Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将httpcontextbase传递到具有HttpContext类型变量的方法_C#_Asp.net_Unit Testing_Moq - Fatal编程技术网

C# 无法将httpcontextbase传递到具有HttpContext类型变量的方法

C# 无法将httpcontextbase传递到具有HttpContext类型变量的方法,c#,asp.net,unit-testing,moq,C#,Asp.net,Unit Testing,Moq,我有一个方法需要HttpContext类型变量 public string GetQueryStringValues(HttpContext context) 我正在从文章中编写单元测试,使用Moq创建/填充HttpContext,并按如下方式传递到方法中: string url = "http://localhost:51209/WebForm1.aspx?height=6&width=7&length=8&mode=walk"; Ht

我有一个方法需要HttpContext类型变量

public string GetQueryStringValues(HttpContext context)
我正在从文章中编写单元测试,使用Moq创建/填充HttpContext,并按如下方式传递到方法中:

        string url = "http://localhost:51209/WebForm1.aspx?height=6&width=7&length=8&mode=walk";
        HttpContextBase contextbase = MoqHelper.FakeHttpContext(url);
        string result = new Helper(whitelist).GetQueryStringValues(context); 
我收到以下错误消息:

无法从“System.Web.HttpContextBase”转换为“System.Web.HttpContext”

如何在不更改方法GetQueryStringValues的签名的情况下解决此问题

请帮忙


谢谢

不幸的是,如果不更改签名,您无法执行此操作。但是,您的签名将更好地使用抽象,而不是具体类型。

您的方法将需要更改为采用
HttpContextBase
而不是
HttpContext
-即:
public string GetQueryStringValues(HttpContextBase context)
抽象我的意思是:HttpContextBase-它是一个抽象类,HttpContext是一个具体的实现。在编写完单元测试之后,我必须看看实际的asp.net网页是否能够将context对象传递给使用contextbase作为输入参数的方法。你们认为呢?抽象有很多好处-它们可以被其他实现所取代,可以提供模拟实现(您的案例),可以提供松耦合,等等。底线是,您将从我的asp.net应用程序中signature.empi的更改中受益,我使用HttpContext.Current获取上下文并传递到方法中。如何获取HttpContextBase的实例?我不能那样做