I need to make units tests for an ASP.net application. Since i never did it. I was wondering how i could make tests for events(click etc...) or to check what a method is returning...
Do you have some example to share? Thanks in advance
I need to make units tests for an ASP.net application. Since i never did it. I was wondering how i could make tests for events(click etc...) or to check what a method is returning...
Do you have some example to share? Thanks in advance
您可以使用 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,这是您可以使用的其他模拟框架。
对于 UI 测试,您可以使用 Selenium 或 Visual Studio 中的 codedUI 测试。对于项目结构,使用 MVP 或 MVC 作为框架,这将提供关注点分离,您可以使用 NUNIT 或其他单元测试框架测试您的模型逻辑。
这是 ASP.NET 的一大设计缺陷,也是很多新项目都在 ASP.NET MVC 中开发的原因。正如 François Wahl 所说,为了使您的项目更具可测试性,您应该将尽可能多的业务逻辑转移到您可以编写单元测试的演示者类中。
要测试您的 ASP.NET 事件处理程序,您确实需要针对 UI 本身进行测试。像Selenium这样的工具对此很有用。它在客户端上运行,因此与您在服务器上运行的任何平台完全无关。它还附带了一个 Firefox 插件来帮助您自动化测试用例。
您可能可以从阅读NUnit 快速入门开始,如果它需要变得更加特定于 ASP.NET,也许这篇文章尤其适用于 NUnit 和 ASP.NET。
您会发现很难针对文件后面的代码编写单元测试,因为您最终会遇到依赖 HttpContext 存在的方法/事件。HttpContext 是一个不继承自接口本身的密封类。这使得它不可能嘲笑。
鉴于可能必须存在有效的 HttpContext(例如重定向),您的单元测试将抛出“对象未初始化”异常。
您可以通过应用 Model-View-Presenter (MVP) 模式或类似模式使 asp.net 应用程序对单元测试更加友好,而不是在遇到这些问题时处理它们。将 UI 从业务逻辑和模型中分离出来。
这个想法是将所有业务逻辑从代码隐藏文件中移出到一个单独的纯 C# 类(The Presenter)中,您现在也可以针对该类编写单元测试。
您可以在此处找到有关 ASP.NET 和 MVP 的更多信息:http: //msdn.microsoft.com/en-us/magazine/cc188690.aspx
我并不是说重构所有代码以应用 MVP,我只是建议将业务逻辑尽可能移动到您测试的单独类中,使用 MVP 作为指导。