以下のコードに示すメソッドに対していくつかのテストを書きたいと思っていました。私はJMockitとの依存関係を嘲笑しています。何らかの理由で私はいつもNullPointerExceptionを取得しています。なぜそれが起こるのか本当に分かりません。私はJMockitには新しく、一般的な依存関係を嘲笑しています。スタックトレースは、行new NonStrictExpectations()
でスローされたNullPointerExceptionを示しています。をテストするNockPointerExceptionがコントローラのクラスを模倣しているとき
方法:
@Override
public boolean addSubject(User user, Schedule schedule, SchoolSubject subject) {
final boolean result = schedule.addSubject(subject.getHourTime(), subject);
scheduleDAO.update(schedule);
if (subject.getTeacher() != null && !subject.getTeacher().trim().isEmpty()) {
for (final TeacherEntry teacher : user.getTeachers()) {
if (subject.getTeacher().equals(teacher.getName())) {
teacher.getSubjects().add(subject.getName());
teacherDAO.update(teacher);
}
}
}
try {
userDAO.update(user);
} catch (final DuplicateUniqueFieldException e) {
throw new UnexpectedUniqueViolationException(e);
}
}
試験方法:
//imports not copied
public class ScheduleManagerTest {
@Tested
ScheduleManager manager;
@Injectable
UserDAO userDAO;
@Injectable
ScheduleDAO scheduleDAO;
@Injectable
TeacherEntryDAO teacherDAO;
@Injectable
SchoolSubjectDAO schoolSubjectDAO;
@Mocked
Schedule schedule;
@Mocked
SchoolSubject subject;
@Mocked
User user;
@Test
public void testAddSubject() throws DuplicateUsernameException, DuplicateEmailException {
new NonStrictExpectations() {
{
schedule.addSubject(anyInt, (SchoolSubject) any);
result = true;
scheduleDAO.update((Schedule) any);
subject.getTeacher();
result = anyString;
subject.getTeacher().trim().isEmpty();
result = false;
user.getTeachers();
result = (ArrayList<TeacherEntry>) any;
teacherDAO.update(((TeacherEntry) any));
userDAO.update((User) any);
};
};
assertTrue(manager.addSubject(user, schedule, subject));
}
}
私はあなたがに@RunWith(JMockit.class)
を追加する必要があります私はかなり間違って何か:(
をからかっんでしょうJUnit 4テストでは "test"プレフィックスを使わない、テストメソッドでは 'throws Exception'を使うなど)、テストコードでは(例えば' final'を一貫して使用し、不必要に 'boolean'を返しません) 。ですから、プログラミングの本を読んで、その言語やそのイディオムを研究し、もっと知識と経験を得るまで、高度なツール(模擬図書館)を使わないようにしてください。あなたが聞きたかったものではないかもしれませんが、それは最も有用なアドバイスです... –