我正在试图弄清楚在以下情况下发生的事情的具体情况:
我正在为TestClass中的以下回调编写测试。 (除非它是相关的,否则我会投票忽略使包装可见的设计决定:))
public class TestClass {
Event mEvent;
// omitted for the sake of brevity.
EventsForDateLoader.Callback mEventsForDateLoadedCallback = new EventsForDateLoader.Callback() {
@Override
public void onCalendarEventsLoaded(List<CalendarEvent> calendarEvents) {
mEvent.getEventDate(); // this results in a NPE
// do other stuff
}
@Override
public void onError(Throwable throwable) {
// do stuff
}
};
}
对于测试,我正在做以下事情:
@Before
public void setup() {
test = new TestClass();
test.mEvent = mock(Event.class);
}
@Test
public void testCallback_onCalendarEventsLoaded() {
test.mEventsForDateLoadedCallback.onCalendarEventsLoaded(new ArrayList<>);
// assert stuff
}
此测试失败,因为模拟的mEvent为null(模拟永远不会设置)。
为什么会这样?如果我在匿名内部类中滥用实例变量,我认为IDE会警告我。
如果这是相关的,这是在Android上下文中完成的。