0

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

protected string DoSomething()
{
  Request.UrlReferrer.Host is used
//Request is of httprequest usercontrol
}

我正在尝试为此方法编写一个单元测试用例。

并调用 target.DoSomething() 但请求的值为空。如何给它一个值以便 DoSomething() 方法不会中断?

请帮忙。

谢谢。

4

1 回答 1

0

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

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

例如,您可能有一个类似的界面

interface ICanHandleRequest { }

因此,您可以在生产代码中包含您的 DoSomething 方法通常使用的实现。

class RequestHandler : ICanHandleRequest { } 

但是对于您的测试,您将创建一个不同的实现,以便可以测试您的 DoSomething 方法。

class TestHandler : ICanHandleRequest { }

如果您愿意,您还可以使用模拟库(例如Rhino Mocks)来构建此类伪造品。这个想法是DoSomething不需要知道如何使用HttpRequest,它有其他职责。它只需要输出。在生产中,该数据将来自您的真实班级,并且将使用HttpRequest. 对于测试,您可以简单地将实现替换为可以生成适合您的测试的数据的东西。说得通?

于 2012-04-07T03:01:44.620 回答