java TDD

    技术2024-09-26  61

    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; }}

    最新回复(0)