【发布时间】:2013-03-04 02:10:04
【问题描述】:
我想尝试 Moq 来模拟一个请求对象,以在我的测试用例中模拟网络故障等事情。我的第一次尝试是:
var mock = new Mock<WebRequest>();
mock.Setup(m => m.GetResponse()).Throws<WebException>();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
//trying to get this to throw a web exception
request.GetResponse();
这不起作用,所以我正在寻找正确的方法来做到这一点。
谢谢
编辑:正如 cmets 中指出的那样,我想使用 WebRequest.Create(它实际上是另一种方法,但我已经为示例进行了简化)。
【问题讨论】:
-
您的示例看起来很奇怪 - 您设置了一个对象,但希望在完全不同的对象上获得异常。
mock.Object.GetResponse()有什么问题?或者您正在尝试实际拦截WebRequst.Create静态工厂方法的执行? -
@AlexeiLevenkov 是绝对正确的,我建议这将是一个正确的答案。
-
@OferZelig,虽然它可能没问题,但我强烈怀疑directedbit 是否想要 - 我怀疑被测代码实际上使用 Create 而不是依赖传入的请求对象(或自定义可模拟工厂) - 所以不太可能有帮助。等待 OP 评论。
-
@Alexi 代码实际上是在另一种方法中调用的(我简化了它)所以我想这意味着我必须将它作为参数传递。在我使用过的其他语言(例如 ruby)中,您可以重新定义方法调用,以便新实例调用存根,我会假设这种行为。