五:自动测试
TDD(Test-Driven Development)测试驱动开发
与传统的开发方式不同,TDD不再是先把软件开发好,再测试。而是先写好测试再开发软件。
Web程序更注重两种自动化测试,单元测试和集成测试。
.NET单元测试
在解决方案中可以创建一个独立的测试项目,容纳各种测试套件。一个套件就是一个C#类。它定义了一组测试方法,每个方法对应希望校验的一种行为。一个测试项目可以包含多种多样的测试套件类。
1:新建带有测试项目的示例MVC项目
2:在测试项目中新建一个测试类
using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Web.Mvc; using TestDemoMVC.Controllers; namespace TestDemoMVC.Tests { [TestClass] public class AdminControllerTest { [TestMethod] public void TestHomeController() { //Arrange HomeController controller = new HomeController(); // Act ViewResult result = controller.Index() as ViewResult; // Assert Assert.IsNotNull(result); Assert.IsTrue(true); } [TestMethod] public void TestTrueMethod() { Assert.IsTrue(true); } [TestMethod] public void TestFalseMethod() { Assert.IsFalse(true); } } }
3:打开测试界面
4:运行测试
可以看到如下结果
AAA模式(准备/动作/断言模式)
准备(Arrange)指建立测试环境,动作(Act)指执行测试,断言(Assert)是值判断是否能够得到需要的结果。
TDD及“红-绿-重构”工作流程
- 确定需要给应用程序添加的特性或方法
- 编写测试,用来检验要添加的特性或方法(先编写测试)
- 运行测试得到一个红色信号,因为并没有实现
- 编写实现新特性的代码
- 再次运行测试修正代码,一直到得到绿色信号
- 必要时重构代码
- 运行该测试,确认修改不会改变这个新增特性的行为
TDD和传统的开发流程完全不同。TDD是先定义测试,后实现特性。
TDD的精髓是在实现功能之前就要考虑如何修改和增强功能,也就是在程序开发之前就要有一个计划好的明确的目标。
集成测试
集成测试最常用的方法是UI自动化(UI Automation),含义是通过再现用户要执行的动作,如单击,跟踪链接,提交表单等,模拟或自动操作一个Web浏览器。
- Selenium RC是一个含有Java的服务器应用程序,可以把自动化命名发送给IE,Firefox,.NET客户端等待浏览器,以方便可以用自己选择的语言来编写测试脚本。
- WaitN是一个可以把自动化命名发送给IE或Firefox的.NET库,它的API没有Selenium强大,不过处理常见的情况绰绰有余。优点是只要引用一个单一的DLL即可。