SQLiteOpenHelper的Android JUnit测试
我不熟悉junit测试 谁能帮助我,如何测试我的SQLiteOpenHelper的Android JUnit测试,android,sqlite,junit,Android,Sqlite,Junit,我不熟悉junit测试 谁能帮助我,如何测试我的SQLiteOpenHelper类 意味着我必须实现哪些类以及如何测试我的数据库和表。 我正在使用EclipseIDE。这个问题非常抽象。 我建议您阅读Android测试指南。它有一些测试Android应用程序的简单示例 在不了解代码的情况下,我假设您的SQLiteOpenHelper被某个活动或服务使用。我认为这项活动/服务是你必须测试的 活动或服务的ServiceTestCase应该是一个良好的开端 我希望它能有所帮助。从API级别24开始
SQLiteOpenHelper
类
意味着我必须实现哪些类以及如何测试我的数据库和表。
我正在使用EclipseIDE。这个问题非常抽象。 我建议您阅读Android测试指南。它有一些测试Android应用程序的简单示例 在不了解代码的情况下,我假设您的SQLiteOpenHelper被某个活动或服务使用。我认为这项活动/服务是你必须测试的 活动或服务的ServiceTestCase应该是一个良好的开端
我希望它能有所帮助。从API级别24开始,
重命名DelegatingContext
已被弃用。线程建议使用的RuntimeEnvironment.application
,如中所述
旧答案供参考:
对于简单的DatabaseHandler:
公共类MyDatabase扩展了SQLiteOpenHelper{
私有静态最终字符串数据库\u NAME=“DATABASE.db”;
私有静态最终int数据库_VERSION=1;
公共MyDatabase(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
//一些代码
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//一些代码
}
}
我创建了一个AndroidTestCase:
公共类DatabaseTest扩展了AndroidTestCase{
私有数据库;
@凌驾
public void setUp()引发异常{
super.setUp();
RenamingDelegatingContext=新的RenamingDelegatingContext(getContext(),“test”);
db=新的MyDatabase(上下文);
}
@凌驾
public void tearDown()引发异常{
db.close();
super.tearDown();
}
//根据Zainodis注释,仅适用于旧版,在gradle>1.1时无效:
//@试验
公共无效测试入口(){
//这里我有我的新数据库,它没有连接到应用程序的标准数据库
}
}
您也可以。您只需要在数据库中添加以下依赖项
androidTestCompile('com.android.support.test:runner:0.3'){
exclude group: 'com.android.support', module: 'support-annotations'
}
并按如下方式标记您的测试类
@RunWith(AndroidJUnit4.class)
public class DatabaseTest {
@Test
public void myFirstTest(){
//your test
}
}
重命名DelegatingContext现在在v24中不推荐使用。使用机器人分子测试。下面是一个示例(以Kotlin为单位) 您可以从中获取整个项目源代码
你可以从中获得详细信息,谢谢你,伙计。我读过android指南。但是我仍然对junit有点困惑。我只是更新了链接并添加了一个新的链接。感谢@Ajinkya+1提供的使用
重命名delegatingcontext()
的技巧,这对于测试非常有用。您是否缺少一些代码?即@Test annotations、super.setUp()和db.open()?我认为android测试环境不需要测试注释请参见:super.setUp()方法是空的,但从技术上讲,您可能应该包括它。要访问数据库,您可能需要执行以下操作:db.getWritableDatabase();在gradle:1.1.0、mockito core:1.9.5和junit:4.12的Android Studio中,@Test注释实际上被标记为错误,因此似乎不再需要甚至不允许。相反(据我所知),在您的测试用例之前加上前缀“test”。@Zainodis我根据您的inputWith更新了代码
@RunWith(RobolectricGradleTestRunner::class)
@Config(constants = BuildConfig::class, sdk = intArrayOf(LOLLIPOP), packageName = "com.elyeproj.simpledb")
class ExampleUnitTest {
lateinit var dbHelper: DbHelper // This is your SQLOpenHelper class
@Before
fun setup() {
dbHelper = DbHelper(RuntimeEnvironment.application) // Your new context from Robolectric
dbHelper.clearDbAndRecreate() // A function just to clear and recreate DB
}
@Test
@Throws(Exception::class)
fun testDbInsertion() {
// Given
val testStr1 = "testing"
val testStr2 = "testing"
// When
dbHelper.insertText(testStr1)
dbHelper.insertText(testStr2)
// Then
assertEquals(dbHelper.getAllText(), "$testStr1-$testStr2-")
}
@After
fun tearDown() {
dbHelper.clearDb() // A function just to clear the DB
}
}