如何对方法/事件进行单元测试

时间:2012-04-24 08:05:00

标签: c# asp.net unit-testing nunit

我需要为ASP.net应用程序进行单元测试。因为我从来没有这样做过。我想知道如何对事件进行测试(点击等等......)或检查方法返回的内容......

你有一些分享的例子吗? 提前致谢

4 个答案:

答案 0 :(得分:0)

您可能可以通过阅读NUnit Quickstart开始阅读,如果需要更具特定于ASP.NET的话可能会post on NUnit and ASP.NET in particular

答案 1 :(得分:0)

您会发现很难针对文件后面的代码编写单元测试,因为您最终会遇到依赖于HttpContext存在的方法/事件。 HttpContext是一个不从接口本身继承的密封类。这使得无法模仿。

鉴于可能必须存在有效​​的HttpContext(例如重定向),单元测试将抛出“Object is not initialized”异常。

通过应用Model-View-Presenter(MVP)模式或类似模式,您可以使asp.net应用程序更加单元测试,而不是处理这些问题。 将UI与业务逻辑和模型分开。

我们的想法是将所有业务逻辑从代码隐藏文件中移出到一个单独的,简单的C#类(The Presenter)中,您现在也可以编写单元测试。

您可以在此处找到有关ASP.NET和MVP的更多信息:http://msdn.microsoft.com/en-us/magazine/cc188690.aspx

我并不是说重新考虑所有代码以应用MVP,我只是建议尽可能将业务逻辑移动到您测试的单独类中,使用MVP作为指导。

答案 2 :(得分:0)

这是ASP.NET的一个重大设计缺陷,也是ASP.NET MVC中开发许多新项目的原因。正如FrançoisWahl所说,为了使您的项目更具可测性,您应该将尽可能多的业务逻辑移动到可以编写单元测试的演示者类中。

要测试ASP.NET事件处理程序,您确实需要在UI本身定位测试。像Selenium这样的工具对此非常有用。它在客户端上运行,因此与您在服务器上运行的任何平台完全无关。它还附带一个Firefox附加组件,可帮助您自动化测试用例。

答案 3 :(得分:0)

你可以使用像这样的工具 http://watin.org/

您可以通过以下方式测试您的asp.net代码。

[Test]
public void ExampleTest()
{
IE ie = new IE("http://www.google.com"); 

ie.TextField(Find.ByName("q")).TypeText("WatiN"); 
ie.Button(Find.ByValue("Google Search")).Click(); 
Link link = ie.Link(Find.By("href", "http://watin.sourceforge.net/"));

Assert.That(link.Text == "WatiN Home"); 
}

要对您的业务类进行单元测试,您可以使用Nunit和rhino模拟作为模拟框架

你可以找到moq,这是你可以在以下位置使用的其他模拟框架。

http://code.google.com/p/moq/

对于UI测试,您可以使用Visual Studio中的Selenium或codedUI测试。 对于项目结构,使用MVP或MVC作为框架,它将提供关注点分离,您可以使用NUNIT或其他单元测试框架测试模型逻辑。