0

这是我将要使用 JUnit 和 JMock 测试的控制器方法。

public String myMethod(ModelMap model, Principal principal,
                        @PathVariable MyObject obj) {
  if (obj != null) {
    Student student = getStudent(principal);
    if (check(obj, student)) {
      model.addAttribute(student).addAttribute(obj);
      return "page";
    }
  }
  return REDIR;
}


private boolean check(MyObject obj, Student student) {
  return student.getStudentNumber().longValue() == obj.getStudent().getStudentNumber().longValue();
}

我的测试

final StudentService studentService = context.mock(StudentService.class);

public void test() throws Exception {
  ModelMap model = new ModelMap();
  final MyObject = new myObject();

  context.checking(new Expectations() {
    {
      oneOf(studentService).getByNumber(SecurityHelper.getStudentNumberOf(Helper.getTestPrincipal()));
      will(returnValue(mockStudent));
    }
  });

  controller.myMethod(model, Helper.getTestPrincipal(), obj);
}

运行测试时,我得到了一个NullPointerExeption指向检查方法的点。知道这是从哪里来的吗?是因为我缺乏期待吗?Student 和 obj 不是可模拟的接口。我是新手。跟踪此类测试错误的最佳方法是什么?

4

1 回答 1

1

如果我理解正确,这是引发异常的行:

return student.getStudentNumber().longValue() == obj.getStudent()
    .getStudentNumber().longValue();

所以异常可能来自几个地方:

  1. studenobj为空。
  2. student.getStudentNumber()返回空值。
  3. obj.getStudent()返回空
  4. obj.getStudent().getStudentNumber()返回空值。

对所有这些语句执行 System.out 并查看哪个为空。

于 2012-11-29T09:49:16.103 回答