Mac*_*bey 59 database android unit-testing
我正在编写我的第一个Android数据库后端,我正在努力对我的数据库的创建进行单元测试.
目前我遇到的问题是获取一个有效的Context对象来传递给我的SQLiteOpenHelper实现.有没有办法在扩展TestCase的类中获取Context对象?我想到的解决方案是在我的TestCase的setup方法中实例化一个Activity,然后将该Activity的Context分配给我的测试方法可以访问的字段变量......但似乎应该有一个更简单的方法.
感谢您的输入!
梅西
Eri*_*ass 41
您可以尝试切换到AndroidTestCase.通过查看文档,似乎它应该能够为您提供有效的Context以传递给SQLiteOpenHelper.
编辑:请记住,您可能必须在Eclipse中的"Android测试项目"中设置测试,因为测试将尝试在模拟器(或真实设备)上执行.
bir*_*rdy 28
如果您正在运行测试InstrumentationRegistry,则可以使用InstrumentationRegistry.getTargetContext()方法来获取上下文:
Context- 提供InstrumentationRegistry.getContext()目标应用程序的应用程序.
Context- 提供InstrumentationRegistry.getInstrumentation().getTargetContext()本仪器的包装.
对于AndroidX使用InstrumentationRegistry.getInstrumentation().getContext()或InstrumentationRegistry.
Ehs*_*san 15
你的测试不是单元测试!!!
当你需要
您不是在编写单元测试。
您需要在androidTest包中编写测试
根据AndroidTestCase:getContext()我的经验,使用该方法只会提供存根上下文。为了测试,我在主应用程序中使用了一个空活动,并Context通过该活动获取了。我还用ActivityInstrumentationTestCase2该类扩展了测试套件类。似乎为我工作。
public class DatabaseTest extends ActivityInstrumentationTestCase2<EmptyActivity>
EmptyActivity activity;
Context mContext = null;
...
@Before
public void setUp() {
activity = getActivity();
mContext = activity;
}
... //tests to follow
}
Run Code Online (Sandbox Code Playgroud)
其他人都在做什么?
您可以从MockContext派生并返回例如MockResources on getResources()、有效ContentResolver ongetContentResolver()等。这会带来一些痛苦,一些单元测试。
替代方法是运行例如模拟整个 Android 操作系统的Robolectric。这些将用于系统测试:运行速度要慢得多。
| 归档时间: |
|
| 查看次数: |
37973 次 |
| 最近记录: |