2011-12-13 87 views
0

我在为一个应用程序编写一些单元测试的同时,在我的类中构建直观的方法,根据调用方法的“类”进行不同的渲染。单元测试的委托方法

所以,我在NUnit的类,并且需要测试是否FormsAuthenticationTicket用于身份验证的用户已成功创建:我现在面临

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

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

这是一个更好的选择,而移动数据呼叫出了单元测试,但我学习的过程中匿名方法,并希望做这样的事情:

delegate<Test> { AuthenticateSimulate(customer); } 

是否有在3.5中做出这样的不错的选择?

+0

是否使用MVC与ASP.NET 3.5,这是一个Web窗体应用程序? –

+0

我正在使用3.5与正常的Web窗体。我没有100%的MVC出售,并希望通过非常规的方式构建“传统”的东西。感觉我真的会学到东西:) – JadedEric

+0

我不知道我明白你想要完成什么。 Code.Authenticate(),,AuthenticateSimulate和customer未定义。我建议简化你的问题。您是否在提交http表单作为测试的一部分?你真的只是试图在你的数据访问层中测试一个验证用户名和密码的方法吗?如果您希望某个方法的行为取决于某个条件,请在该方法中添加一个参数。我不确定你为什么要以非常规的方式开始构建一些东西。首先学习标准花费的时间会更多。 –

回答

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

+0

有趣。感谢拉米a。似乎是我在找的东西。 – JadedEric