【问题标题】:delegate methods for unit tests单元测试的委托方法
【发布时间】:2011-12-13 09:03:20
【问题描述】:

我在想,在为应用程序编写一些单元测试以将直观的方法构建到我的类中时,这些方法会根据调用该方法的“类”而有所不同。

所以,我在一个 NUnit 类中,需要测试是否为经过身份验证的用户成功创建了 FormsAuthenticationTicket

Assert.DoesNotThrow(typeof(Application.AuthenticationFailure), 
   delegate { Code.Authenticate(); }

我面临的问题是 HttpContext 在单元测试中无效。找到了几个解决方案,但就像 Phil Haack 对他的 HttpSimulator 所做的那样。这不能直接在我的单元测试代码中工作,因为我正在模拟 EF 类(我知道不推荐),并且模拟器会影响连接字符串。

宁愿将数据调用移出单元测试是一个更好的选择,但我正在学习过程中的匿名方法,并想做类似的事情:

delegate<Test> { AuthenticateSimulate(customer); }

在 3.5 中有一个不错的选择来做这样的事情吗?

【问题讨论】:

  • 您是在使用 MVC 和 ASP.NET 3.5 还是这是一个 Web 窗体应用程序?
  • 我正在使用 3.5 和普通的网络表单。我不是 100% 支持 100% MVC,我希望通过以非传统方式构建“传统”的东西来实现这个想法。觉得我真的会学到一些东西:)
  • 我不确定我是否理解您要完成的工作。 Code.Authenticate()、、AuthenticateSimulate 和 customer 未定义。我建议简化您的问题。您是否在测试中提交了 http 表单?您真的只是想在数据访问层中测试一种方法来验证用户的用户名和密码吗?如果您希望方法根据条件表现不同,请向该方法添加一个参数。我不确定您为什么要开始以非传统方式构建某些东西。最好先花时间学习标准。
  • 这里的想法是构建一个接受匿名条件的单一委托测试,类似于 Action(Func()) 的工作方式。如果它更有意义。
  • 为什么 HttpSimulator 不能与您模拟的 EF 类一起使用?

标签: unit-testing anonymous-methods nunit-2.5


【解决方案1】:

也许可以尝试像 RhinoMocks、Moq 或 TypeMock Isolator 这样的模拟对象框架,或者像 Microsoft Moles 这样的隔离框架。

http://research.microsoft.com/en-us/projects/moles/
“用您自己的委托替换任何 .NET 方法!”
“Moles 是 .NET 中基于委托的测试存根和绕行的轻量级框架。Moles 可用于绕行任何 .NET 方法,包括密封类型中的非虚拟/静态方法。”

编辑
另见:
http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

以Mvc为例:
http://mvccontrib.codeplex.com/wikipage?title=TestHelper&referringTitle=Documentation

【讨论】:

  • 有趣。谢谢拉米一个。似乎是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 2014-04-09
  • 2015-05-10
  • 2016-08-21
  • 2017-09-24
相关资源
最近更新 更多