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. studenまたはobjnullです。
  2. student.getStudentNumber()null を返します。
  3. obj.getStudent()null を返します
  4. obj.getStudent().getStudentNumber()null を返します。

これらすべてのステートメントに対して System.out を実行し、どれがヌルかを確認します。

于 2012-11-29T09:49:16.103 に答える