这是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());
.....
}
......
}
当我使用Robolectric运行CustomAdapterTest#testOne()时,我不知道为什么,但mCustomAdapter.mHiddenItems
为null,因此在调用mCustomAdapter.getCount()时导致NPE。这不会发生在CustomAdapterTest的第一个版本上。
1)为什么使用RobolectricGradleTestRunner private SortedSet mHiddenItems = new TreeSet<>();
未执行?
2)如何解决这个问题?我希望它按预期执行private SortedSet mHiddenItems = new TreeSet<>();
。
这不是一个有效的解决方案(可能是其他情况下),但谢谢,我感谢你在我的问题上的努力。 – JoseF