问题标签 [android-unit-testing]

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 回答
34 浏览

android - 使用 Junit5 和 mockito 进行单元测试

我正在尝试使用 Junit-5 和 mockito 为 android 编写一个单元测试用例但是当有一个返回语句时如何为这种函数编写测试用例

0 投票
0 回答
30 浏览

android - 未找到 Android 单元测试模板

我安装了 Android Studio 版本 2020.3.1 Patch1,但我的单元测试出了点问题!当我尝试运行它们时,我会收到此错误:

同样在我的编辑配置中,我没有 Android 单元测试模板!正如您在下图中看到的那样:

在此处输入图像描述

0 投票
0 回答
22 浏览

mockito - android,如何使用 mockito 测试 Runable 的运行功能

让一个类NotifyTaskRunner在一个线程中运行一个任务,当任务完成时,它将使用 Handler 发布一个 Runnable,在其中它将调用DataPrepareCallback::onComplete(T)Handler 所在的任何线程。

问题出在测试中,当 Handler 为 时Handler(Looper.getMainLooper())Runnable::run()从未调用过,也没有DataPrepareCallback::onComplete().

当不通过测试时,被调用Handler的测试工作正常。DataPrepareCallback::onComplete()

打印出来的有:

如何测试Runnable'run(),验证它是否在Handler的线程上等等?

0 投票
1 回答
21 浏览

unit-testing - android,如何对使用 doAsync() 的 BroadcastReceiver 进行单元测试

在 android 应用上,使用 Broadcastreceiver 处理通知点击。

在单元测试中

但它抛出一个异常,因为它asyncResult是空的。

如何测试它何时使用 doAsync()?

0 投票
1 回答
186 浏览

android - Robolectric + JaCoCo | 运行单元测试且未生成代码覆盖率时出现问题

我添加了Robolectric以获得对 Shadow API 的支持以编写单元测试。能够通过 Android Studio 中默认的 Intellij 代码覆盖率工具获取覆盖率。

现在尝试添加 JaCoCo 以获得增强的覆盖率报告。

我正在使用文件build.gradle(app)
插件作为apply from: "$rootDir/jacoco.gradle"
依赖项作为testImplementation 'org.robolectric:robolectric:4.3.1'


jacoco.gradle

通过 CL/Run(Button) 或 Jenkins 运行测试用例时,出现相同的错误

我感谢您的帮助!

0 投票
0 回答
34 浏览

android - 如何使用 mockito 为“const val”编写 Junit 测试

我有一个类文件,我在其中定义了几个const val

现在,我需要编写测试用例以确保如果有人意外更改常量值,那么这些测试用例应该失败,因为更改常量可能会导致数据丢失的潜在损害,因此想要防止。

我正在尝试在下面使用

但它抛出错误

在 com.my.app.util.Constants 的类层次结构中找不到名为“USERNAME”的实例字段。

请帮助我知道如何修复它。

0 投票
0 回答
262 浏览

robolectric - android unittest得到了instrument.IllegalClassFormatException,为什么它抱怨“(有Java 1)。”?

拥有一个 android 库项目,它已使用 android studio 4.1.2 构建并进行了单元测试。现在改为使用android studio (fox) 2020.3.1 path 3。

它开始出现错误Cannot run gradle test tasks because of java.lang.NoClassDefFoundError: jdk/internal/reflect/GeneratedSerializationConstructorAccessor1

添加后task.jacoco.excludes = ['jdk.internal.*']

错误消失了,但现在得到了:

该项目有

和其他相关:

错误IllegalStateException: Cannot process instrumented class ... Please supply original non-instrumented classes.是什么意思?为什么它抱怨它有have Java 1指定的地方JavaVersion.VERSION_1_8

在项目的 resourcec 文件夹中,它还必须robolectric.properties使用sdk=28api 版本 28 来询问它。

问题是可能缺少什么,因为它在 android studio 4.1.2 中运行良好。

0 投票
0 回答
130 浏览

android-studio - 更新到 Android Studio (fox) 2020.3.1 patch3 单元测试/覆盖测试不起作用

让一个 android 库项目在 AS 4.1.2 上运行良好。

刚刚安装了 Android studio (fox) 2020.3.1 补丁 3,没有做任何更改(除了将 sdk jre 设置为 java 8,版本 18.6.0_60,因为项目正在使用JavaVersion.VERSION_1_8)。

使用新的 AS(fox) 构建和运行很好,但它在单元测试和覆盖测试方面存在问题。

  1. 运行单元测试时,测试将通过但显示一些错误日志:
  1. 当尝试运行覆盖测试时,它只能通过Rnu xxxtest with coverage

在此处输入图像描述

不像在 AS 4.1.2 中,它可以从 Gradle 窗格/任务中运行覆盖测试: 在此处输入图像描述

同样在 AS 4.1.2 中,它可以在 build/report/jacoco 文件夹中查看覆盖率测试报告:

在此处输入图像描述

在新的 AS(fox) 中,它失败了很多test events were not not received 在此处输入图像描述

在新的 AS(fox) 中,在 build/report 文件夹中,它找不到结果的 jacoco 文件夹(html 文件告诉覆盖测试结果是什么,即分支是如何覆盖的)。

相关依赖:

  • Gradle:类路径“com.android.tools.build:gradle:4.0.0”distributionUrl=https://services.gradle.org/distributions/gradle-6.8.3-bin.zip

  • 测试
    类路径“org.jacoco:org.jacoco.core:0.8.1”

问题

  1. 如何解决Please supply original non-instrumented classesAS (fox) 中的错误?

  2. 如何解决test events were not not received

  3. jacoco 覆盖率测试结果 html 在哪里,它显示了覆盖率的详细信息?

0 投票
1 回答
46 浏览

android - 单元测试 ViewModel 和 Helper/Manager 类

我有一个与 android 中的单元测试有关的问题。该应用程序是用 Kotlin、MVVM 架构、Dagger-Hilt、Room 等编写的……根据官方文档,我已经为 Room DAO 编写了所有测试。我创建了假存储库,因此我可以测试一些处理业务逻辑的管理器/助手(这些类封装了我必须在许多 ViewModel 中重用的逻辑)。现在我需要测试将这些 Managers/Helper 作为依赖项的 ViewModel。我不想陷入重新测试相同代码的陷阱,问题是如何测试 ViewModel?我应该只测试传递给这些管理器/助手中的函数的参数,并为此编写断言,还是应该做什么?

提前致谢!

0 投票
1 回答
22 浏览

kotlin - android,为什么在隐蔽到 kotlin 后单元测试失败

在 android 应用程序上,具有 java 功能

测试代码,它在调用模拟 jsonObject.put(key, value) 时抛出并且工作正常:

转换为 kotlin 后

测试失败,没有抛出异常。