C# 在单元测试中,如何为具有httprequest usercontrol的请求分配一个值?
我有一个方法使用masterpage.asx.cs中的Request.urlreferer.HostC# 在单元测试中,如何为具有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()方法不会中断 请
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
。对于测试,您可以简单地用能够生成适合您的测试的数据的东西替换实现。有道理吗