Это CustomAdapter (кстати: на самом деле старый код, должны быть улучшены некоторые день):EasyMock с Robolectric: EasyMock не работает, как ожидалось
public class CustomAdapter extends BaseAdapter{
private SortedSet<Integer> mHiddenItems = new TreeSet<>();
@Override
public final int getCount(){
return mHiddenItems.size();
}
...
}
Это мой тестовый класс CustomAdapterTest (и все работает хорошо здесь) :
public class CustomAdapterTest extends TestCase{
private static final int ITEMS_IN_ADAPTER = 10;
private CustomAdapter mCustomAdapter;
@Override
public void setUp() throws Exception{
super.setUp();
mCustomAdapter = EasyMock.createMockBuilder(CustomAdapter.class)
.addMockedMethod("method1")
.addMockedMethod("method2")
.createMock();
expect(mCustomAdapter.method2()).andReturn(ITEMS_IN_ADAPTER).anyTimes();
}
public void testOne(){
EasyMock.replay(mCustomAdapter);
assertEquals(ITEMS_IN_ADAPTER,mCustomAdapter.getTotalCount());
.....
}
......
}
Попытка использовать Robolectric, и после устранения одной ошибки, это как CustomAdapterTest выглядит следующим образом:
@RunWith(RoboelectricGradleTestRunner.class)
@Config(constants = BuildConfig.class , packageName="my.package.name")
public class CustomAdapterTest{
private static final int ITEMS_IN_ADAPTER = 10;
private CustomAdapter mCustomAdapter;
@Before
public void setUp(){
System.setProperty("dexmaker.dexcache",RuntimeEnvironment.application.getCacheDir().getPath())
mCustomAdapter = EasyMock.createMockBuilder(CustomAdapter.class)
.addMockedMethod("method1")
.addMockedMethod("method2")
.createMock();
expect(mCustomAdapter.method2()).andReturn(ITEMS_IN_ADAPTER).anyTimes();
}
public void testOne(){
EasyMock.replay(mCustomAdapter);
assertEquals(ITEMS_IN_ADAPTER,mCustomAdapter.getTotalCount());
.....
}
......
}
Когда я запускаю CustomAdapterTest # testOne() с помощью Robolectric, я не знаю, почему, но mCustomAdapter.mHiddenItems
имеет значение null, вызывая NPE при вызове mCustomAdapter.getCount(). Это не происходит в первой версии CustomAdapterTest.
1) Почему при использовании RobolectricGradleTestRunner private SortedSet mHiddenItems = new TreeSet<>();
не выполняется?
2) Как это исправить? Я хочу, чтобы он выполнил private SortedSet mHiddenItems = new TreeSet<>();
, как и ожидалось.
Это недействительное решение для моего дела (возможно, для других случаев), но спасибо, я ценю ваши усилия по моему вопросу. – JoseF