标签: android-testing

Android Junit测试与正常Junit测试

我正在接管一个Android项目,我希望为项目引入单元测试,以帮助避免可能的回归.

对于普通的java项目,我有两个源文件夹:srctest.在src源文件夹中包含了我所有的源文件和我的test源文件夹中包含了我所有的单元测试,我相信这是保持独立的测试从源头非常标准,所以你不必与他们发货.

我一直在网上阅读,Android应用程序的方法看起来有点不同.几个例子讨论为a设置第二个项目android test project然后引用它android project.

我想确认一些事情:

  1. 有没有第二个项目用于测试在测试android项目时要做的适当的事情,或者我只是找到了不好的例子?
  2. 所有单元测试都应该是android单元测试吗?例如,是的,他们应该都是,或者我不应该在android单元测试和junit之间混合,因为junits具有较少的开销.
  3. android单元测试对junit测试有什么额外的好处?例如处理模拟器等

junit android android-testing

9
推荐指数
1
解决办法
2946
查看次数

Android单元测试 - 代码引用android类时的最佳实践

我有一个常规的JUnit测试用例来测试非android方法逻辑.该方法将TextUtils用于TextUtils.isEmpty()之类的东西.

我只是为了引入TextUtils类而使它成为AndroidTestCase是没有意义的.有没有更好的方法来测试这个单元测试?喜欢将android.jar添加到测试项目或其他什么?

与我想要模拟Context对象的另一个测试类似的情况.如果不扩展AndroidTestCase,我无法嘲笑它.在这些情况下,我只是尝试测试非Android逻辑并且不希望它在模拟器上运行,但它触及一些Android类的最佳实践是什么?

谢谢

junit android unit-testing android-testing

9
推荐指数
2
解决办法
2494
查看次数

如何在不影响生产数据库的情况下测试使用ContentProvider的Activity?

问题

我有两个我要测试的Android类:

我目前有两个测试类:

  • CommentContentProviderTest,扩展ProviderTestCase2<CommentContentProvider>和使用MockContentResolver.这很好用.
  • CommentActivityTest,延伸ActivityInstrumentationTestCase2<CommentActivity>.除了CommentActivity访问的部分外,这种方法很好CommentContentProvider.

问题是,当CommentActivity访问时CommentContentProvider,它通过标准这样做ContentResolver:

ContentResolver resolver = getContentResolver();
Cursor cursor = resolver().query(...);
Run Code Online (Sandbox Code Playgroud)

因此,当CommentActivityTest运行时,它会启动CommentActivity,访问(读取和写入)生产数据库,如上面两行所示.

我的问题是如何在生产中CommentActivity使用标准ContentResolver,但MockContentResolver在测试期间.

相关问题

可能的解决方案

如果我可以通过启动的Intent注入ContentResolver(可能是a MockContentResolverRenamingDelegatingContext),那将是很好的,但我不能这样做,因为s不是.CommentActivityContextParcelable …

android dependency-injection abstract-factory android-contentresolver android-testing

9
推荐指数
1
解决办法
1208
查看次数

使用Espresso进行相机操作UI测试

我需要使用espresso测试项目自动化我的UI测试以进行以下操作.

操作:

单击打开手机摄像头的按钮.捕获图像,并将图像保存在SD卡存储中.完成后还要在屏幕上更新小图像视图.

应用程序工作正常但是对于所有其他操作和类似的上述操作类型,一次又一次地手动测试它变得非常耗时.

android integration-testing unit-testing android-testing android-espresso

9
推荐指数
2
解决办法
7538
查看次数

在Android Studio中的Android Instrumentation测试和单元测试之间共享代码

可以在Android Studio中的这两种测试模式之间共享代码吗?我有一套Mock Utils类,我需要在两种测试模式下访问.

testing android gradle android-testing android-studio

9
推荐指数
2
解决办法
780
查看次数

如何强制Android应用程序使用32位或64位库

在具有64位ARM的Android设备上,将有两个版本的库,32位和64位,它们的性能可能会有所不同.我想知道是否有办法强制应用程序使用32位或64位库.

android android-testing

9
推荐指数
2
解决办法
2万
查看次数

为androidTest定义buildConfigField

我定义特定字段中BuildConfig用于获取URL运行时.因此,对于每种构建类型,我使用不同的字符串:

    prod {
        buildConfigField "String", "BASE_URL", "\"abc.com\""
    }

    debug {
        buildConfigField "String", "BASE_URL", "\"efg.com\""
    }
Run Code Online (Sandbox Code Playgroud)

在运行android测试时是否可以定义不同的URL?我试过把这个设置放在下面sourceSets->androidTest,但它不被接受.

android gradle android-testing android-gradle-plugin gradle-plugin

9
推荐指数
1
解决办法
659
查看次数

由ActivityTestRule实例化引起的java.lang.IncompatibleClassChangeError

我在我的Android项目中添加了espresso测试,并在创建ActivityTestRule的行上获得了IncompatibleClassChangeError.我如何找出导致它的原因?

以下是导致错误的代码行:(HomePageScreenTest.java:27)

@Rule
public ActivityTestRule<HomePageActivity> homePageActivityTestRule = new ActivityTestRule<>(HomePageActivity.class);
Run Code Online (Sandbox Code Playgroud)

这是错误:

java.lang.IncompatibleClassChangeError: com.example.rocklee.mehmvp.HomePage.HomePageActivity
at dalvik.system.DexFile.defineClassNative(Native Method)
at dalvik.system.DexFile.defineClass(DexFile.java:226)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
at dalvik.system.DexPathList.findClass(DexPathList.java:321)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.example.rocklee.mehmvp.HomePage.HomePageScreenTest.<init>(HomePageScreenTest.java:27)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:54) …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-espresso

9
推荐指数
1
解决办法
2672
查看次数

测试 Room AutoMigrations 时,我应该向 runMigrationsAndValidate 传递什么?

使用Room AutoMigrations时,它Migration本身会自动生成。但为了对迁移进行单元测试,我必须将一个Migration对象传递给runMigrationsAndValidate. 我应该在这里传递什么?

@RunWith(AndroidJUnit4::class)
class MigrationTest {
    private val TEST_DB = "migration-test"

    @Rule
    val helper: MigrationTestHelper = MigrationTestHelper(
            InstrumentationRegistry.getInstrumentation(),
            MigrationDb::class.java.canonicalName,
            FrameworkSQLiteOpenHelperFactory()
    )

    @Test
    @Throws(IOException::class)
    fun migrate1To2() {
        var db = helper.createDatabase(TEST_DB, 1).apply {
            // db has schema version 1. insert some data using SQL queries.
            execSQL(...)

            // Prepare for the next version.
            close()
        }

        // Re-open the database with version 2 and provide
        // Migration as the migration process.
        db …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-sqlite android-room

9
推荐指数
1
解决办法
1401
查看次数

收到“应用程序中未找到撰写视图。您的活动已恢复吗?”

我有一个Composable有一个TextButtonText将显示P当前方向是否为纵向,L否则。单击Button会将方向更改为横向,(因此之后,应该将文本从 更改PL

这是可组合的

@Composable
fun MyApp() {
    val currentOrientation = LocalConfiguration.current.orientation
    val orientation = if (currentOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
            "P"
        } else {
            "L"
        }
    val activity = LocalContext.current as Activity
    Column {
        Text(text = orientation)
        Button(onClick = {
            // change orientation to landscape
            activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        }) {
            Text(text = "DO IT")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我测试的方法

@get:Rule
val composeRule = createComposeRule() …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-instrumentation android-jetpack-compose

9
推荐指数
1
解决办法
4198
查看次数