在这个匿名的内部阶级&实例变量访问情况?

时间:2015-03-19 18:20:43

标签: java android junit anonymous-inner-class

我正在试图弄清楚在以下情况下发生的事情的具体情况:

我正在为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上下文中完成的。

0 个答案:

没有答案