2016-03-02 103 views
1

这是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<>();

回答

0

这不是您的问题的确切答案。但我只会重新测试测试和班级。

我会删除部分模仿和注入项目在构造函数或通过设置。或者我会在构造函数中再次模拟物品提供者。

+0

这不是一个有效的解决方案(可能是其他情况下),但谢谢,我感谢你在我的问题上的努力。 – JoseF