在 Android Studio 中运行检测测试而不模拟用户操作

Posted

技术标签:

【中文标题】在 Android Studio 中运行检测测试而不模拟用户操作【英文标题】:Running an instrumented test in Android Studio without simulating user actions 【发布时间】:2021-09-12 16:12:46 【问题描述】:

我已经编写了一些操作 MotionEvent 实例的代码,并且想为它编写一个单元测试。

单元测试只需要验证我的操作;它不需要模拟任何用户操作。

我知道它需要进行仪器测试才能使用 MotionEvent 的方法;我需要实际的方法,而不是任何嘲笑。

我在目录 src/androidTest/... 中定义了一个检测测试;但是,它仍然抛出异常

java.lang.RuntimeException:在 android.view.MotionEvent 中获取的方法未模拟。

我的模块的 build.gradle 文件包含以下条目:

defaultConfig 
    ...
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

...
dependencies 
    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

我的测试类中的导入如下:

import android.view.MotionEvent;
import org.junit.Test;
import static org.junit.Assert.*;

如何运行此测试?

【问题讨论】:

【参考方案1】:

我的错误如下。

我最初认为本地单元测试就足够了,因为不涉及用户操作。

事实证明是错误的:本地单元测试无法访问 Android 方法。

我将包含测试的文件移动到为插桩测试指定的位置 /src/androidTest/java/,但没有更改文件;这可以在我的导入中看到。

因此,它仍然作为本地非仪器测试运行。

意识到这一点后,我更改了文件以模​​仿 Android Studio 与我的项目一起创建的 ExampleInstrumentedTest。我还删除了仍然是本地测试的运行配置。

之后Android studio提示我新建一个运行配置,测试运行成功。

【讨论】:

以上是关于在 Android Studio 中运行检测测试而不模拟用户操作的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - Gradle 总是构建所有模块,而不仅仅是我运行的模块

使用 chaquopy 在 android studio 中集成 python 代码(对象检测代码)

如何在 Android Studio 中分析测试?

Android studio 怎么使用单元测试(不需要device)

Robolectric结合Android Studio的使用

2.0Android Studio编写你的应用