Moq、VB、HttpResponseBase 和标头
我正在使用 VB 中的 Moq 围绕一些自定义控制器编写一堆测试。到目前为止,我还不必处理 VB Lambda 的缺点,因为我只对属性或方法进行了 moqed。
直到今天早上,我尝试使用 Cassini 对我的代码运行集成测试。我有使用 Response.Headers.Add 添加标头的代码。我这样做是为了可以使用 Moq(Of HttpResponseBase) 和 Headers->NameValueCollection 的 SetupGet 在单元测试中轻松获取标头集合。当然,代码在集成管道模式下的 IIS7 以外的任何环境中都会阻塞。
因此,我更改了代码以使用 Response.AddHeader,这意味着我的单元测试失败。由于我使用的是 VB,因此我可以看到一种合理的方法将对 AddHeader 的调用映射到 Headers 集合,因为 Function() 需要 VB 中的返回值。
我在这里看到一些关于 Moq 和 VB 的条目,但没有人真正遇到将 Subs 映射到 Moq 中其他内容的问题。
有没有人在 VB 中使用 Moq 解决过这种特殊情况?
I'm in the process of writing a heap of tests around some custom controllers using Moq in VB. Up until now, I've not had to deal with VB Lambda shortcomings since I've only moqed properties or methods.
That is until this morning when I try also running integration tests using Cassini against my code. I had code to add headers using Response.Headers.Add. I did this so I could easily get the headers collection in unit tests using Moq(Of HttpResponseBase) and a SetupGet for Headers->NameValueCollection. Of course, the code chokes in anything other than IIS7 in Integrated Pipeline mode.
So, I changed my code to use Response.AddHeader, which means my unit tests fail. And since I'm in VB, I can' see a sane way to map the call to AddHeader to the Headers collection since Function() needs a return value in VB.
I see a few entries here about Moq and VB, but no one really has the problem of mapping Subs to something else in Moq.
Has anyone tackled this particular situation in VB using Moq?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
啊。为什么你发帖后解决方案总是变得很明显。 :-)
这很丑陋,但它有效。
然后重写 Add/AppendHeader 来执行 Headers.Add。现在您可以捕获人们在代码中使用的任何变体,因为它们都属于 Response.Headers 集合。无论您使用哪种方法,真正的代码都可以工作。
不像 C# 中带有回调的 Moqing Add/Append 那样干净,但它确实有效。
Ugh. Why do the solutions always become apparently AFTER you post. :-)
This is ugly, but it works.
Then override Add/AppendHeader to do Headers.Add. Now you catch any variation people use in code as they all fall into Response.Headers collection. The realy code works regardless of which method you use.
Not as clean as just Moqing Add/Append in C# with callbacks, but it does work.