当前位置: 首页 > 面试题库 >

为什么Android上的JUnit 4无法正常工作?

曾承弼
2023-03-14
问题内容

正如Android文档所说:“请注意,Android测试API支持JUnit 3代码样式,但不支持JUnit4。”
(测试基础知识)。应该清楚的是,Android无法立即使用JUnit
4。

但是为什么会这样呢?是因为测试是在DVM中执行的(因为Android Runtime仅支持JUnit
3)?在JVM上,自己可以选择应使用的JUnit运行时。在DVM中这是不可能的吗?


问题答案:

更新2015/10

现在可以通过AndroidJUnitRunner(它是Android测试支持库的一部分)进行操作。简而言之,您需要在基于Gradle的项目中执行以下操作:

  1. 添加依赖项:

    dependencies {
    compile 'com.android.support:support-annotations:22.2.0'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    

    }

  2. 指定testInstrumentationRunner:

    android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    

    }

  3. 使用注释您的测试课程@RunWith(AndroidJUnit4.class)

  4. 用普通的JUnit4风格编写测试。

另请参阅Espresso安装说明。请注意,普通的JUnit4测试不需要Espresso本身。

为什么需要它

我在互联网上找不到关于此主题的信息。我发现最好的是InstrumentationTestRunner上的信息。

没有什么能像其他任何Java代码一样阻止JUnit4测试在Android设备上运行。但是,Android测试框架还有一些其他工作:

  1. 它将测试结果通过ADB发送回您的开发机器。
  2. 它会进行检测(我不确定这到底涉及什么)。

以上是通过一些专门针对JUnit3的扩展执行的。

这个特定于JUnit3的代码似乎是InstrumentationTestRunner的一部分,而InstrumentationTestRunner构成了核心Android系统的一部分。但是,从AndroidJUnitRunner可以明显看出,可以使用支持JUnit4或其他框架自定义测试运行器。



 类似资料:
  • 问题内容: 看来AngularJS的不起作用。它不适用于数字字符串。难道我做错了什么?我应该使用吗? 我需要一些东西来查看字符串是否是一个数字(实际上是一个数字),除非我乘以1,否则我不会这么做,但是如果我这样做,那么它将始终为真。另外是不是一个数字(定义)等应该返回false。 问题答案: 在 JavaScript中 ,。 例如,如果需要将 字符串 识别为 Number ,则将其转换为 Numb

  • 问题内容: 我试图通过使用该方法销毁所有会话变量,但是在使用此方法之后,这些值不会被销毁。 为什么不工作? 还有其他方法可以销毁PHP中的会话吗? 问题答案: 使用后,会话将在后台被销毁。由于某种原因,这不会影响已为此请求填充的中的值,但在以后的请求中将为空。 如果需要,您可以手动清除()。

  • 问题内容: 这是我的代码: 这是我的输出: 我的理解 是。因此,应该首先一个号码,然后松开,然后给到线或。所以,一次应该有一个数字,对吧? 但是为什么我的代码一次是两个或三个数字?我做错什么了吗(我是新手)? 问题答案: 虽然确实不是同步的,但是它访问变量。 即使您同步访问权限,它也无济于事,因为下一种情况仍然可能: 线程1增量 线程2增量 线程1的打印值 线程2的打印值 要解决此问题,您需要增加

  • 问题内容: 我在Ubuntu Hardy VPS上做了一份计划工作,只有一半可以工作,我不知道为什么。这项工作是一个Ruby脚本,它使用mysqldump备份Rails应用程序使用的MySQL数据库,然后将其压缩并使用SFTP上传到远程服务器。 gzip文件已成功创建并复制,但始终为零字节。但是,如果我直接从命令行运行cron命令,它将运行完美。 这是cron工作: 这是datadump.rb:

  • 问题内容: 我试图在sed的正则表达式中使用它,但是它不起作用: 但这是可行的: 问题答案: 是一个开关,而不是正则表达式宏。如果要使用一些预定义的“常量”而不是表达式,请尝试运行以下代码:

  • 问题内容: 为什么这不起作用? 实际上,我所有的元素都不可见。如果我在选择器中删除对的引用,则确实会显示div中的最后一个,但这不是我想要的。 当然,我只能一直保留一个,但这只是一个reveal.js演示文稿,我无法控制JavaScript。 如何选择带有类的div中的最后一个元素?我不想为此使用JavaScript。 问题答案: 您的问题是,您正在阅读并认为它可以用作选择器,而实际上它 仅 表示