java TDD

来源:互联网 发布:nginx.org set 编辑:程序博客网 时间:2024/05/18 02:30

TDD(测试驱动开发)是一种引入大量底层反馈的技术,它能持续地测试,确保我们编写正确的代码,并快速指出有问题的代码。

TDD要为每一段代码编写测试用例,而且要测试先行,测试用例用来定义代码需要做什么。

 

开发步骤中的一次循环

1.用代码编写一个规格说明,要符合单元测试的形式。

2.描述测试失败

3.编写代码,实现规格说明

4.测试通过

5.小型的重构,优化代码

 

TDD的每个循环非常短,可以快速得到反馈。采用这种持续、渐进的开发方式,一直针对整个系统运行所有的测试,可确保新增的代码不会破坏系统中其它的任何代码,大大降低了维护成本。

 

准备工作:安装MyEclipse、JUnit、Ant,正确配置环境变量。

下面的例子,包括2个业务类,2个对应的测试类,以及1个测试套件

public class Student {
 private String name;
 Student(String name){
  this.name = name;
 }
 public String getName() {
  return name;
 }
}
//继承自一个TestCase类,用来测试Student

import junit.framework.TestCase;

public class StudentTest extends TestCase{

//测试方法必须声明为public,返回值必须为void

 public void testCreat(){               //方法的名字必须以小写test为前缀
  final String firstStudentName = "rio";
  Student student = new Student(firstStudentName);
  String studentName = student.getName();
  assertEquals(firstStudentName,studentName);     //断言,确保第一个参数与第二个参数相同
 }
}

public class CourseSession {
 private String department;
 private String number;
 private int numerofStudents;
 public CourseSession(String department,String number) {
  this.department = department;
  this.number = number;
  numerofStudents = 0;
 }
 String getDepartment(){
  return department;
 }
 String getNumber(){
  return number;
 }
 int getNumberOfStudents(){
  return numerofStudents;
 }
 void enroll(Student student){
  numerofStudents = numerofStudents + 1;
 }
}

import junit.framework.TestCase;

public class CourseSessionTest extends TestCase{
 private CourseSession session;
 public void setUp(){       //JUnit将在执行每个测试方法之前,先执行setUp方法中的代码
  session = new CourseSession("java","60");
 }
public void testCreate(){
    CourseSession session = new CourseSession("java","60");
    Student student1 = new Student("saber");      //此处Student对象的生命周期和 testCreate()的执行周期相同
    Student student2 = new Student("mio");   
    session.enroll(student1);   
    session.enroll(student2);   
    assertEquals("java",session.getDepartment());
    assertEquals("60",session.getNumber());
    assertEquals(2,session.getNumberOfStudents());  
 }
 public void testEnrollStudents(){
     ……
 }
}

 //测试套件,能够让一套测试一起运行

import junit.framework.TestSuite;

public class AllTests {
 public static TestSuite suite(){
  TestSuite suite = new TestSuite();
  suite.addTestSuite(StudentTest.class);   //增加测试
  suite.addTestSuite(CourseSessionTest.class);
  return suite;
 }
}