Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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# 在单元测试中,如何为具有httprequest usercontrol的请求分配一个值?_C#_Unit Testing_User Controls_Httprequest - Fatal编程技术网

C# 在单元测试中,如何为具有httprequest usercontrol的请求分配一个值?

C# 在单元测试中,如何为具有httprequest usercontrol的请求分配一个值?,c#,unit-testing,user-controls,httprequest,C#,Unit Testing,User Controls,Httprequest,我有一个方法使用masterpage.asx.cs中的Request.urlreferer.Host protected string DoSomething() { Request.UrlReferrer.Host is used //Request is of httprequest usercontrol } 我正试图为这个方法编写一个单元测试用例 并且有一个调用target.DoSomething()但请求的值为null。如何给它一个值,使DoSomething()方法不会中断 请

我有一个方法使用masterpage.asx.cs中的Request.urlreferer.Host

protected string DoSomething()
{
  Request.UrlReferrer.Host is used
//Request is of httprequest usercontrol
}
我正试图为这个方法编写一个单元测试用例

并且有一个调用target.DoSomething()但请求的值为null。如何给它一个值,使DoSomething()方法不会中断

请帮忙


谢谢。

我将推荐一种不同的方法,因为这些值不能在
HttpRequest
中设置

编写一个类,其唯一职责是处理
HttpRequest
并生成适当的输出。然后从该类中提取接口
DoSomething
将取决于该接口。对于您的测试,您将能够提供一个“假”或替代实现,该实现可以服务于该方法随后将在其逻辑中使用的数据

例如,您可能有一个如下的接口

interface ICanHandleRequest { }
所以你可以在你的产品代码中有一个你的DoSomething方法通常使用的实现

class RequestHandler : ICanHandleRequest { } 
但是对于您的测试,您将创建一个不同的实现,以便可以测试DoSomething方法

class TestHandler : ICanHandleRequest { }
如果您愿意,您还可以使用模拟库(例如)来构建此类赝品。其思想是,
DoSomething
不需要知道如何使用
HttpRequest
,它还有其他职责。它只需要输出。在生产环境中,这些数据将来自真实的类,它将使用
HttpRequest
。对于测试,您可以简单地用能够生成适合您的测试的数据的东西替换实现。有道理吗