无法导入 android.arch.persistence.room.testing.MigrationTestHelper
Cannot import android.arch.persistence.room.testing.MigrationTestHelper
我已阅读 Room Persistence Library. I also clone android-architecture-components 然后我尝试添加 Mirgration 测试。但是,我无法导入
import android.arch.persistence.room.testing.MigrationTestHelper;
我也使用最新的 lib 版本。
android.arch.core:core-testing:1.0.0-alpha3
这是 MigrationTest 的代码
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.db.framework.FrameworkSQLiteOpenHelperFactory;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
import android.arch.persistence.room.testing.MigrationTestHelper;
@RunWith(AndroidJUnit4.class)
public class MigrationTest {
private static final String TEST_DB = "migration-test";
@Rule
public MigrationTestHelper helper;
public MigrationTest() {
helper = new MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
MigrationDb.class.getCanonicalName(),
new FrameworkSQLiteOpenHelperFactory());
}
@Test
public void migrate1To2() throws IOException {
SupportSQLiteDatabase db = helper.createDatabase(TEST_DB, 1);
// db has schema version 1. insert some data using SQL queries.
// You cannot use DAO classes because they expect the latest schema.
//db.execSQL(...);
// Prepare for the next version.
db.close();
// Re-open the database with version 2 and provide
// MIGRATION_1_2 as the migration process.
db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2);
// MigrationTestHelper automatically verifies the schema changes,
// but you need to validate that the data was migrated properly.
}
}
由于代码使用 AndroidJUnit4,因此只需使用 androidTestCompile 即可
androidTestCompile "android.arch.persistence.room:testing:$arch_version"
官方文档使用依赖进行本地单元测试。但是,官方示例使用Android runner...
https://developer.android.com/topic/libraries/architecture/adding-components.html
您正在使用 Android 转轮 (AndroidJUnit4.class
),您的测试实际上位于 src/androidTest
。这意味着您正在使用 Instrumented Tests
应声明哪些依赖项:
// Instrumented Unit Test or UI Test
androidTestComplile ....
同时,如果你写Local Unit Test
,测试代码放在src/test
,你可以声明依赖:
// Local Unit Test
testCompile ....
在Google文档中,他们只是给出了一个本地单元测试的例子。这里没有错误。
and 的答案是正确的,但有点过时了。对于那些想知道的人:
- 使用
androidTestImplementation
代替androidTestCompile
- AndroidX:
androidx.room:room-testing
在 gradle 中完成实施:
androidTestImplementation "androidx.room:room-testing:$room_version"
(2.2.4 是撰写本文时的最新版本)
主要问题是google为 JUnit 本地 测试用例提供文档而不是工具(这意味着在真实设备或模拟器上进行测试)。
结果我看到了很多
的例子
testImplementation "androidx.room:room-testing:$room_version"
这没有意义,因为您只能使用仪器测试用例来测试您的房间数据库。否则你会得到一个错误。因此,您必须在 gradle 文件中使用 androidTestImplementation 而不是 testImplementation。
def room_version = "2.2.5"
def test_version = "1.2.0"
androidTestImplementation "androidx.test:runner:$test_version"
androidTestImplementation "androidx.test:rules:$test_version"
androidTestImplementation "androidx.room:room-testing:$room_version"
我已阅读 Room Persistence Library. I also clone android-architecture-components 然后我尝试添加 Mirgration 测试。但是,我无法导入
import android.arch.persistence.room.testing.MigrationTestHelper;
我也使用最新的 lib 版本。
android.arch.core:core-testing:1.0.0-alpha3
这是 MigrationTest 的代码
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.db.framework.FrameworkSQLiteOpenHelperFactory;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
import android.arch.persistence.room.testing.MigrationTestHelper;
@RunWith(AndroidJUnit4.class)
public class MigrationTest {
private static final String TEST_DB = "migration-test";
@Rule
public MigrationTestHelper helper;
public MigrationTest() {
helper = new MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
MigrationDb.class.getCanonicalName(),
new FrameworkSQLiteOpenHelperFactory());
}
@Test
public void migrate1To2() throws IOException {
SupportSQLiteDatabase db = helper.createDatabase(TEST_DB, 1);
// db has schema version 1. insert some data using SQL queries.
// You cannot use DAO classes because they expect the latest schema.
//db.execSQL(...);
// Prepare for the next version.
db.close();
// Re-open the database with version 2 and provide
// MIGRATION_1_2 as the migration process.
db = helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2);
// MigrationTestHelper automatically verifies the schema changes,
// but you need to validate that the data was migrated properly.
}
}
由于代码使用 AndroidJUnit4,因此只需使用 androidTestCompile 即可
androidTestCompile "android.arch.persistence.room:testing:$arch_version"
官方文档使用依赖进行本地单元测试。但是,官方示例使用Android runner...
https://developer.android.com/topic/libraries/architecture/adding-components.html
您正在使用 Android 转轮 (AndroidJUnit4.class
),您的测试实际上位于 src/androidTest
。这意味着您正在使用 Instrumented Tests
应声明哪些依赖项:
// Instrumented Unit Test or UI Test
androidTestComplile ....
同时,如果你写Local Unit Test
,测试代码放在src/test
,你可以声明依赖:
// Local Unit Test
testCompile ....
在Google文档中,他们只是给出了一个本地单元测试的例子。这里没有错误。
- 使用
androidTestImplementation
代替androidTestCompile
- AndroidX:
androidx.room:room-testing
在 gradle 中完成实施:
androidTestImplementation "androidx.room:room-testing:$room_version"
(2.2.4 是撰写本文时的最新版本)
主要问题是google为 JUnit 本地 测试用例提供文档而不是工具(这意味着在真实设备或模拟器上进行测试)。
结果我看到了很多
的例子testImplementation "androidx.room:room-testing:$room_version"
这没有意义,因为您只能使用仪器测试用例来测试您的房间数据库。否则你会得到一个错误。因此,您必须在 gradle 文件中使用 androidTestImplementation 而不是 testImplementation。
def room_version = "2.2.5"
def test_version = "1.2.0"
androidTestImplementation "androidx.test:runner:$test_version"
androidTestImplementation "androidx.test:rules:$test_version"
androidTestImplementation "androidx.room:room-testing:$room_version"