我有一个这样的测试类:
public class PostRepositoryTest extends AndroidTestCase {
Context context;
@Before
public void setUp() throws Exception {
context = new Application();
}
@Test
public void testFindAll() {
PostRepository postRepository = PostRepository.get(context);
List<Post> all = postRepository.findAll();
assertEquals(0, all.size());
}
}
findAll
方法只是使用ContentResolver从ContentResolver返回结果。
public List<Post> findAll() {
Cursor c = new PostSelection().query(context.getContentResolver());
return listFromCursor(c);
}
在尝试这种方式之前…我是通过使用AndroidInstrumentationTestCase2
并启动一个活动来检查所有这些事情来做到这一点的,但我想避免这种情况。
我想把它作为一个单元测试。这可能吗?
这取决于您是否想要在设备上运行此测试用例。如果您想在本地JVM上运行,而不是在设备上运行,请选择robolelectric。如果你想在没有AndroidInstrumentationTestCase2的设备上运行,那么你可以使用AndroidJUnitRunner。它基于Junit4规范。点击这里阅读链接:https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
查看代码示例了解基本思想:https://github.com/googlesamples/android-testing/tree/master/unittesting/BasicUnitAndroidTest
如果你根据上面的链接设置你的测试套件,那么你不需要扩展任何类或启动一个活动。您可以使用以下代码获取上下文对象:InstrumentationRegistry.getTargetContext();
or
InstrumentationRegistry.getContext();