我将推荐一种不同的方法,因为这些值不能在内部设置HttpRequest。
编写一个类,其唯一职责是处理HttpRequest并产生适当的输出。然后从该类中提取一个接口。DoSomething然后将取决于该接口。对于您的测试,您将能够提供“假”或替代实现,该实现可以提供该方法随后将在其逻辑中使用的数据。
例如,您可能有一个类似的界面
interface ICanHandleRequest { }
因此,您可以在生产代码中包含您的 DoSomething 方法通常使用的实现。
class RequestHandler : ICanHandleRequest { }
但是对于您的测试,您将创建一个不同的实现,以便可以测试您的 DoSomething 方法。
class TestHandler : ICanHandleRequest { }
如果您愿意,您还可以使用模拟库(例如Rhino Mocks)来构建此类伪造品。这个想法是DoSomething不需要知道如何使用HttpRequest,它有其他职责。它只需要输出。在生产中,该数据将来自您的真实班级,并且将使用HttpRequest. 对于测试,您可以简单地将实现替换为可以生成适合您的测试的数据的东西。说得通?