在编写JUnit Case时需要帮助

时间:2012-01-10 08:41:40

标签: java junit

我是JUnit的新手,在编写JUnit时面临困难。

我有一个界面和一个类

接口

public interface Student{

    List<String> getStudentList();
    void setStudentList(List<String> studentList);
    void createStudentList();
}

public class StudentServiceImpl implements Student{

        private List<String> studentList

        public List<String> getStudentList() {
            return studentList;
        }


        public void setStudentList(final List<String> studentList){
            this.studentList = studentList;
        }

        public void createStudentList(){
            if (studentList == null) {
                studentList = new ArrayList<String>();
                studentList.add("John");
                studentList.add("Bill");
                studentList.add("Ricky");
                studentList.add("Jack");
            }
            setStudentList(studentList);
        }
    }

为上课写Junit最好的是什么。在编写JUnit案例时应该记住什么。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

以下是恕我直言写得很好的测试用例的例子(用记事本写的,如果不编译,请更正):

import static org.fest.assertions.Assertions.assertThat;

public class StudentTest {

    private final Student student = new StudentServiceImpl();

    @Test
    public void shouldReturnEmptyListOfStudentsWhenNotInitialized() {
        //given

        //when
        List<String> students = student.getStudentList();

        //then
        assertThat(students).isEmpty();
    }

    @Test
    public void shouldReturnSomeStudentsWhenListCreated() {
        //given
        student.createStudentList();

        //when
        List<String> students = student.getStudentList();

        //then
        assertThat(students).containsExactly("John", "Bill", "Ricky", "Jack");
    }

    @Test
    public void shouldStorePreviouslySetListOfStudents() {
        //given
        student.setStudentList(Arrays.asList("Jane", "Bob"));

        //when
        List<String> students = student.getStudentList();

        //then
        assertThat(students).containsExactly("Jane", "Bob");
    }

}

几点提示:

  1. 保持测试简短

  2. 测试名称应描述正在测试的用例

  3. 单独设置代码,测试逻辑和断言

  4. 代码应易于阅读。使用流畅的描述性库,例如FEST

  5. 进一步改进:

    1. 第一次测试应该失败,你知道为什么吗?

    2. 仍然缺少一些测试,你知道哪些测试吗?