android - android studio中的junit测试类

标签 android sqlite testing junit

我正在尝试为我在 Android 中的数据库类创建一个本地 JUNIT 测试类。但是我遇到了几个问题。 这是我要创建的测试类的示例:

import android.test.AndroidTestCase;
import android.test.RenamingDelegatingContext;
import com.example.c.readit.model.Book;
import com.example.c.readit.model.VolumeInfo;
import com.example.c.readit.sqlite.SqliteHelper;
import org.junit.Test;

public class TestDB extends AndroidTestCase{
    private SqliteHelper db;
@Override
public void setUp() throws Exception {
    super.setUp();
    RenamingDelegatingContext context = new RenamingDelegatingContext(getContext(), "test_");
    db = new SqliteHelper(context);
}

@Override
public void tearDown() throws Exception {
    db.close();
    super.tearDown();
}

@Test
public void testSaveBook(){

    String test_ID = "1234";
    String test_TITLE = "TestBook";
    String test_DESCRIPTION = "TestDescription";
    String test_PUBLISHER = "TestPublisher";
    String test_READ = "yes";

    VolumeInfo testVolumeInfo = new VolumeInfo(test_TITLE,test_PUBLISHER,test_DESCRIPTION);
    Book testBook = new Book(test_ID,testVolumeInfo,test_READ);

    long wasSuccesful = db.saveBookMyBooks(testBook);

    assertTrue(wasSuccesful != -1);
}

但是,一些方法已弃用(自 API 24 起)。在 Android 文档中查找它们时,我可以看到我们应该使用“测试支持库”(https://developer.android.com/topic/libraries/testing-support-library/index.html)。

我很难找到示例来学习如何使用它。当我找到一个工作示例时,我遇到了无法获取 SqlLite 数据库上下文的问题。我如何获取上下文 一些示例可用于插桩测试类,但我想编写一个本地 JUNIT 测试类。

我的 gradle 构建:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"

    defaultConfig {
        applicationId "com.example.c.readit"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    configurations.all {
        // To fix 'Error:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (24.0.0) and test app (23.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.'
        resolutionStrategy.force 'com.android.support:support-annotations:23.0.1'
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:design:24.0.0'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.android.support:recyclerview-v7:24.0.0'
    androidTestCompile 'com.android.support.test:runner:0.4'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile 'com.android.support.test:rules:0.4'
}

谢谢

最佳答案

上下文上下文 = InstrumentationRegistry.getTargetContext();

关于android - android studio中的junit测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647852/

相关文章:

android - 是否可以使用 junit 测试来测试本地值?

android - Siteminder 身份验证和 Android

java - Dagger2 无法在注入(inject)类中注入(inject)字段

android - 从 sqlite 获取单个条目

c++ - 在 Sqlite C++ 中插入以下语句

ruby-on-rails - Rails : Populate Heroku database with development. sqlite3 数据

postgresql - 将实时数据恢复到测试数据库后,为了我的实时数据的数据安全,我如何在 PostgreSQL 中清理测试数据库中的数据

testing - 在 Flutter 端到端测试中允许权限对话框?

android - 单击非焦点 EditText 时,光标位置未更新

php - 无法将在手机上运行的 Android 应用程序连接到本地主机