我想爲下面代碼中顯示的方法編寫一些測試。我正在嘲笑JMockit的依賴關係。無論出於何種原因,我總是得到一個NullPointerException,我真的不明白爲什麼會發生這種情況。我是JMockit的新手,並且一般嘲笑依賴關係。堆棧跟蹤僅顯示在new NonStrictExpectations()
處拋出的NullPointerException。當模擬控制器類時出現NullPointerException
方法測試:
@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));
}
}
我覺得我做的事情非常錯誤的:(
嗯...我看到許多錯誤和不良行爲的嘲諷(容易計算一打),無論是在生產代碼(例如,一致地使用'final',不必返回'boolean')和測試代碼中(例如,不要在JUnit 4測試中使用「test」前綴,在測試方法中使用'throws Exception') 。所以,我的理解是閱讀編程書籍,學習語言和習慣用法,也許不會嘗試使用高級工具(一個嘲諷庫),直到你獲得更多的知識和經驗。可能不是你想聽到的,但它是最有用的建議... –