问题标签 [instrumented-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
66 浏览

android - 如何在 Android 中使用单元测试或仪器测试来测试警报管理器

我在测试警报管理器上设置的警报时遇到了问题。我想使用单元测试或仪器测试来检查警报管理器。

0 投票
0 回答
33 浏览

android-studio - 未找到适用于 Android 检测单元测试的测试

我正在运行一个 @SmallTest 类作为我的 Android Studio 应用程序的检测测试。然后单元测试工作得很好,但仪器测试似乎没有被识别。 这是一个图像演示

它表明该类中有 0 个测试,并且通过了 0 个测试。我在测试功能之前确实有@Test,并且模块使用AndroidJUnit4。这可能是什么问题?

0 投票
0 回答
19 浏览

android - Android:如何使用模拟位置进行仪器测试?

对于位置服务的仪器测试,我需要模拟位置。但目前来自 Android 的概念似乎不太实用。

为了被允许使用模拟位置, test-package 还需要权限android.permission.ACCESS_MOCK_LOCATION。当添加到调试清单时,我得到提示,此权限将仅授予系统应用程序。我必须添加tools:ignore="ProtectedPermissions"禁止此警告的权限。恕我直言,对此类测试所必需的属性发出此类警告是没有意义的。

然后我需要选择这个测试包作为测试设备的模拟位置提供程序。可接受手动测试。但是,我真的必须为要测试代码的每个设备手动选择此设置吗?(在测试设备场上的这个 firebase-test 怎么样?我无法进行此设置。)

如果我有多个测试模拟位置的应用程序怎么办?目前我无法在同一设备上测试这两个包。

还是我错过了什么?

0 投票
0 回答
31 浏览

android - context.startActivity 不适用于 UiAutomator 中的单个应用程序

我正在尝试使用 UiAutomator 使用以下代码启动第 3 方应用程序:

Intent 没问题,它适用于例如 Google Play,但不适用于我要启动的另一个应用程序(我不能透露)。

甚至更多,adb shell am start -n package/Class工作,但Runtime.getRuntime().exec("am start -n package/Class")报告,Starting: Intent ...但从测试运行时它不会出现在屏幕上。

如果我在运行测试时使用adb shell启动活动,它也可以正常启动。

我认为这个应用程序以某种方式检测到它是从仪器测试启动的。是否可以隐藏我从测试中启动它的事实?

0 投票
0 回答
49 浏览

java - 如何在 WebView 中测试 KeyListener?

我设置了一个webview.setOnKeyListener,以便我的 WebView 可以在用户单击后退按钮时返回到上一页。
此 WebView 存在于 Fragment 上,在手动使用应用程序时,它在模拟器和真实手机上都能很好地工作。

我面临的问题是我不知道如何在仪器测试中模拟这种行为。
我尝试过的所有代码都会关闭我的 Fragment 而不是将 WebView 发送到上一页。
我觉得“按回”操作正在应用于 Activity 而不是我的 WebView?
至少日志显示在 WebView 中设置的关键侦听器没有捕获任何内容。
任何帮助/想法将不胜感激!

一些上下文:
我的测试正在运行@RunWith(AndroidJUnit4.class)
我用初始化活动

并设置一些代码以在 WebView 中单击以确保它具有返回上一页的历史记录。(与我在模拟器或真实手机上使用它的流程相同,因此它应该可以工作)
我尝试了多种方法来模拟“按下后退按钮”动作,但它们都无法实现我的目标。

我试过的代码:

  1. Espresso.pressBack();

  2. Espresso.pressBackUnconditionally();

  3. UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); mDevice.pressBack();

  4. KeyEvent kdown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); activityRule.getScenario().onActivity(activity -> {activity.onKeyDown(KeyEvent.KEYCODE_BACK, kdown);});

  5. 我用KeyEvent.ACTION_UP在我的setOnKeyListener所以我稍微修改了前一个。
    KeyEvent kdown = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK); activityRule.getScenario().onActivity(activity -> {activity.onKeyUp(KeyEvent.KEYCODE_BACK, kdown);});

  6. onWebView().withElement(findElement(Locator.ID,"a_random_element")).perform(webKeys("javascript:keyUp(" + KeyEvent.KEYCODE_BACK + ")"));

  7. onView(isRoot()).perform(ViewActions.pressBack());

  8. onView(isRoot()).perform(pressKey(KeyEvent.KEYCODE_BACK));

  9. onView(withTagValue(is("myWebView"))).perform(pressBack());

  10. onView(withTagValue(is("myWebView"))).perform(pressKey(KeyEvent.KEYCODE_BACK));

  11. getInstrumentation().sendKeySync(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));

  12. 找不到activityRule.runOnUiThread()(好像找不到这个方法)

  13. Instrumentation inst = new Instrumentation(); inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

0 投票
0 回答
17 浏览

android - 安卓。如何使用多个资产调用编写参数化测试

我有一个返回 SpannableString 的方法。我需要为此方法编写仪器测试。在测试内部,我解析 SpannableString 并检查跨度计数、跨度开始、跨度结束等。这是我的测试示例:

但是,我需要测试更多的输入数据。我想写一个参数化测试,但我的测试中有几个 assertEquals 调用,所以我不明白如何将其转换为参数化测试。也许有一种更优雅的方法可以通过许多 assertEquals 调用为大量输入编写测试。请帮我。

0 投票
0 回答
12 浏览

android-espresso - DataBindingIdlingResource 是否包括绑定适配器的执行?

我知道如果没有挂起的绑定,DataBindingIdlingResource 将跟踪应用程序是否空闲。

在这种情况下,Espresso 将继续测试。但是绑定适配器是否也被视为绑定?

0 投票
0 回答
13 浏览

java - 使用动态模块从终端运行连接测试(动态模块不包含在测试中)

我正在尝试从终端运行已连接的检测测试,但由于动态模块未包含在目标 apk 中,因此某些测试失败。当我从 Android Studio 运行这些测试时,测试就成功了。

我正在使用以下任务

是否还有其他一些任务/标志/流程也包括动态模块?

0 投票
0 回答
19 浏览

android - 安卓。是否可以编写参数化的仪器测试

我正在尝试编写一个参数化的仪器测试。这是我的代码:

但是当我运行我的测试时,我收到以下错误:

org.junit.runners.model.InvalidTestClassError: 无效的测试类 'com. . . . ****.TempTest':

  1. 在 org.junit.runners.ParentRunner.(ParentRunner.java:92) 在 org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java: 74) 在 androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.(AndroidJUnit4ClassRunner.java:43) 在 androidx.test.internal.runner.junit4.AndroidJUnit4Builder.runnerForClass(AndroidJUnit4Builder.java:65) 在 org.junit.runners。 model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37) at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) 在 androidx.test.internal.runner.TestLoader。doCreateRunner(TestLoader.java:73) 在 androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:105) 在 androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:804) 在 androidx.test .runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:613) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 在 androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:411)Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)

我试图找到解决这个问题的方法。作为搜索的结果,我尝试@RunWith(Parameterized::class)为我的TempTest 班级添加注释。@Parameterized.Parameters我还为带有参数的方法添加了注释 testFormatTrimPercentValueArguments()

但是,当我运行测试时出现以下错误:

org.junit.runners.model.InvalidTestClassError: 无效的测试类 'com. . . . ****.TempTest':

  1. org.junit.runners.ParentRunner.(ParentRunner.java:102) 的 org.junit.runners.ParentRunner.validate(ParentRunner.java:525) 没有可运行的方法。 84) 在 org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParametersFactory.createRunnerForTestWithParameters(BlockJUnit4ClassRunnerWithParametersFactory.java:16) 在 org.junit.runners.Parameterized$RunnersFactory 的 org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters.(BlockJUnit4ClassRunnerWithParameters.java:35)。 createRunnersForParameters(Parameterized.java:463) at org.junit.runners.Parameterized$RunnersFactory.createRunners(Parameterized.java:392) at org.junit.runners.Parameterized$RunnersFactory.access$100(Parameterized.java:360) at org. junit.runners.Parameterized.(Parameterized.java:307) 在 org.junit。runners.Parameterized.(Parameterized.java:303) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at org.junit.internal.builders .AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 在 androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63 ) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37) 在 androidx.test.internal.runner.AndroidRunnerBuilder。 runnerForClass(AndroidRunnerBuilder.java:153) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) 在 androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73) 在 androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:105) 在 androidx.test.internal.runner.TestRequestBuilder .build(TestRequestBuilder.java:804) 在 androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:613) 在 androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:411) 在 android.app.Instrumentation$ InstrumentationThread.run(Instrumentation.java:2074)AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:411) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:411) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)

请告诉我我做错了什么。可能无法编写参数化的仪器测试,因为当我编写本地参数化测试时没有这样的问题。当我在androidTest文件夹中编写参数化测试时出现问题。请帮我。

0 投票
2 回答
46 浏览

android - 尝试使用 Android Compose 和 Hilt 设置检测测试时出现 ComponentActivity ClassNotFoundException

我正在设置我的第一个仪器化单元测试,并在 logcat 中遇到了一个不起眼的崩溃。

模拟器启动并在应用程序尝试打开时立即崩溃,并且单元测试甚至没有运行,因为应用程序没有处于正确的状态。

它似乎正在寻找在以下 gradle 依赖项中定义的 androidx.activity.ComponentActivity:

implementation 'androidx.activity:activity-compose:1.3.1'

不知道在哪里看,这是我的第一个测试和我在 git 中的项目: https ://github.com/davida5/ComposeNotepad/blob/main/app/src/androidTest/java/com/anotherday/day17/navigation/NavigatorTest .kt