如何在 Android Studio 的单元测试中使用 Mockito/Hamcrest

2024-03-09

我希望能够在 Android Studio 中进行单元测试和仪器测试,并在其中使用 Mockito。

我正在 Android Studio 0.8 中使用新方法进行测试。这是:

  • 使用 gradle 构建
  • 使用官方Android API进行测试(ActivityInstrumentationTestCase2等)
  • 将测试放在应用程序的目录中,而不是作为单独的模块
  • 在 Android Studio 中启动测试作为“Android Test”运行配置

如何在测试中编写依赖于仅用于测试的库(例如mockito或hamcrest)的代码?

我想在编译和运行测试时包含这些库,但避免将它们导出到已发布的 .apk 中。

In https://code.google.com/p/mockito/wiki/DeclaringMockitoDependency https://code.google.com/p/mockito/wiki/DeclaringMockitoDependency我读过我应该将依赖项添加为:

dependencies {
    ....
    testCompile "org.mockito:mockito-core:1.9.5"
}

但是运行时我得到:

构建脚本错误,发现不支持的 Gradle DSL 方法: '测试编译()'!

虽然我不确定它是否相关,但我使用的 gradle 构建文件是:

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':android-sdk')
    testCompile "org.mockito:mockito-core:1.9.5"
}

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        androidTest.setRoot('tests')

        // Note - to run the tests from command line:
        // $ gradle clean connectedCheck build
        // (requires gradle 1.10)

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

我通过使用“依赖项”下的“androidTestCompile”选项使其工作,如所解释的here http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing.

我所做的是:

  • 创建了一个名为 libs-tests 的文件夹,其中包含仅用于测试的 jar。
  • 添加该文件夹作为“androidTestCompile”测试的依赖项

现在,gradle 构建文件如下:

apply plugin: 'android'

dependencies {
    compile project(':android-sdk')

    // The libs folder is included in the apk of the real app
    compile fileTree(dir: 'libs', include: '*.jar')

    // The tests-libs folder is included only for tests
    androidTestCompile fileTree(dir: 'libs-tests', include: '*.jar')
}


android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }


    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        androidTest.setRoot('tests')

        // Note - to run the tests from command line:
        // $ gradle clean connectedCheck build
        // (requires gradle 1.10)

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android Studio 的单元测试中使用 Mockito/Hamcrest 的相关文章

  • 定期运行任务(每天一次/每周一次)

    我想定期 每周 每天一次 运行一些任务 即获取我的网站新闻页面 即使我的应用程序已关闭 是否可以 是的 您需要查看报警管理器 http developer android com reference android app AlarmMan
  • 按回键隐藏软键盘

    我有一个EditText in an Activity我希望当我打开它时它处于活动状态并且软键盘处于打开状态Activity 这是我的xml for EditText
  • 应用程序实例是否始终在任何活动之前创建?

    在 Android 中 您可以通过扩展 Application 类并在 Manifest 中声明名称来提供您自己的 Application 类实现 我的问题是 这个实现是否总是在初始活动之前创建 或者活动可以在应用程序实例有时间创建之前启动
  • 如何将 EditText 传递给另一个活动?

    Intent intent new Intent this Name class intent putExtra key et getText toString startActivity intent Intent intent getI
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 在 WebView 中完成 AdBlock

    我即将在我的 Android 应用程序中推出 WebView AdBlocking 我想知道这是否会有效地阻止广告 或者在 Webview 本身内是否还有更多工作要做 我尚未修改 基本上我有一个存储在 Android 资产中的主机文件 其中
  • Android - 当不在栏顶部时推送通知空白

    我在使用 Android 推送通知时遇到一个小问题 如果有 3 个通知 并且只有其中一个显示标题和消息 位于酒吧顶部的那个 如果有人知道可能是什么问题 请告诉我 请参阅此链接上的图像 这就是我接收通知的方式http postimg org
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • Android Studio - 如何关闭“单词‘word’中的拼写错误?”

    当命名变量或给出字符串参数时 Android Studio 似乎对我如何标记事物有问题 有办法把它关掉吗 是的 打开Preferences gt Editor gt Inspections gt Spelling gt 关闭Typo并按OK
  • 获取可以共享数据的应用程序列表

    此代码显示默认共享对话框 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType text html sharingIntent putExtra a
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • AnalyticsService 未在应用程序清单中注册 - 错误

    我正在尝试使用 sdk 中提供的以下文档向 Android 应用程序实施谷歌分析服务 https developers google com analytics devguides collection android v4 https d
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 如何在android中的操作栏中创建Edittext?

    我们可以在操作栏中使用编辑文本吗 在阅读了 Google 中的大量资源后 我找不到如何在操作栏中创建编辑文本 谁能告诉我该怎么做 您可以设置自定义View为了ActionBar像这样 getActionBar setCustomView R
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 检测 ListView(或 ScrollView)内的滚动位置

    我正在构建一个聊天室应用程序 其中每 X 秒就会轮询一次新事件 每次发生这种情况时 此代码都会使用新数据更新 RoomAdapter ArrayAdapter 的自定义子类 并将其滚动到底部 RoomAdapter adapter Room
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • Android 中的 Google Places API - 适用于个人用户的 API_KEY

    我已经浏览了与在 Android 应用程序中使用 Places API 相关的 Android 文档和其他博客 到处都建议使用 API KEY 来调用 REST 服务 API KEY 在整个项目 应用程序中都是相同的 每天的请求数限制为 1

随机推荐

  • OAuthException (#368) 尝试的操作已被视为滥用或被禁止

    我正在尝试使用 Graph API 在我的墙上或我的一些朋友的墙上发布提要 我授予了该应用程序所需的所有权限 当我从页面发出请求时允许它们 我拥有有效的访问令牌 但即使发生此异常并且没有发布提要 我的帖子请求看起来不错 已授予权限 我需要做
  • 如何在 jQuery 中选择从当前元素开始的下一个“n”元素?

    如何选择从当前元素开始的下一个 n 元素 我的意思是 this attr 我想做 n 次 以n 4为例 this attr this next attr this next next attr this next next next att
  • 回流类型密封时的满射性检查

    当密封类型上的模式匹配不详尽时 Scala 会发出警告 但是当返回类型被密封时 我们是否可以检查函数是否返回所有情况 例如 考虑以下 ADT sealed trait Foo case object Bar extends Foo case
  • 捆绑包标识符 iOS 配置门户

    我是 iOS 企业计划的团队代理 我正在尝试添加一个新的应用程序 ID 新的应用程序 ID 以前从未在我的帐户中使用过 但可能已被另一个企业帐户使用 但是 提交后 它说 The bundle identifier you have spec
  • 通过 Django 管理站点添加数据时更改大小写(大写/小写)

    我正在配置我的新项目的管理站点 我有点怀疑我应该怎么做 通过管理站点添加数据时点击 保存 所有内容都转换为大写 编辑 好的 我知道 upper 属性 并且我做了一个视图 我知道该怎么做 但我想知道管理站点上是否有任何可用于字段配置的属性 P
  • 针对 Windows Phone 7 Internet Explorer 9 的条件注释

    Problem 条件注释 例如 p All other browsers p 不工作在 Windows Phone 7 上 或者 至少不是我的 Question 有谁知道如何使用这些评论 并且有测试了他们前 WP7 上的 IE 9 是否支持
  • Java Socket 编程不适用于 10,000 个客户端

    我可以创建多个线程来支持套接字编程中的多客户端功能 工作正常 但如果有 10 000 个客户端想要连接 我的服务器就无法创建这么多线程 如何管理线程以便我可以同时监听所有这些客户端 另外 如果在这种情况下服务器想要向特定客户端发送某些内容
  • 是否可以使用 .NET Remoting + TLS 1.2(或 1.1)?

    最近我们的 PCI DSS 扫描失败 并要求我们禁用 TLS 1 0 并启用 TLS 1 1 或 1 2 我在 Windows Server 2008 R2 盒子上找到了如何执行此操作的说明 但我们有一个使用 NET 远程处理的旧应用程序
  • ActiveSupport::Memoizes 指的是哪种 Ruby memoize 模式?

    因此在 Rails 3 2 中 ActiveSupport Memoizes 已被弃用 消息内容如下 DEPRECATION WARNING ActiveSupport Memoizable is deprecated and will b
  • 如何使用 Python OpenCV 优化圆检测?

    我看过几页关于在 python 中使用 opencv 优化圆检测的页面 所有这些似乎都针对特定图片的具体情况 cv2 HoughCircles 的每个参数的起点是什么 由于我不确定推荐值是什么 因此我尝试循环范围 但这并没有产生任何有希望的
  • 我如何在 ubuntu 中将 PDT 与 eclipse 关联/使用?

    我想使用 PDT 和 eclipse 来调试 PHP 我使用的是ubuntu 9 04 谁能帮我 如果可能 请提供详细信息 考虑到这个线程 http dev eclipse org mhonarc lists pdt dev msg0044
  • AngularJS - 可拖动和多个连接的可排序(jQuery UI + Angular-Common)

    我正在尝试延长角度共同 https github com michaeljcalkins angular common非常好拖放模块 https github com michaeljcalkins angular common blob
  • 为什么谓词下推不起作用?

    程序草图 我创建一个 HiveContexthiveContext 有了这个背景 我创建了一个 DataFramedf来自 JDBC 关系表 我注册数据框df via df registerTempTable TESTTABLE 我通过启动
  • Umbraco 检查 - 查询问题

    我使用 检查 检索的对象具有以下数据值 图片链接 https i stack imgur com 8sUOb jpg为了更方便查看 Icon icon shopping basket alt 2 color red IndexType co
  • Spring Security:没有 WebSecurityConfigurerAdapter 的全局 AuthenticationManager

    我试图摆脱 WebSecurityConfigurerAdapter AuthenticationManager 的配置如下 Configuration EnableGlobalMethodSecurity prePostEnabled t
  • pip install t sne 不起作用

    我无法在 Windows 计算机上安装 tsne 软件包 我按照说明进行操作here https github com danielfrg tsne blob master README md安装 Python 的 tsne 包 但要么pi
  • XMLHttpRequest (Ajax) 错误

    我在用着XMLHttpRequest在 JavaScript 中 但是 它给了我一个错误 我不知道我的问题是什么 我必须解析 XML 文件并将其内容分配给网页 这是我的代码
  • 用于将数据复制并粘贴到另一个工作表的宏

    我发现下面的代码可以根据唯一标识符将数据从一个工作表复制并粘贴到另一个工作表 它还将工作表重命名为唯一标识符 除了公式现在显示为数字之外 它的工作效果非常好 请有人知道如何修改代码以便保留实际公式 Dim wsAll As Workshee
  • 如何在CSS中设置列表的宽度

    我有代码 如下所示 文本不对齐有点烦人 它会影响其他li元素 我怎样才能使它成为固定宽度 我尝试过 width XYZpx 但没有任何作用 li class date 2 28 2010 9 37 38 AM li li class dat
  • 如何在 Android Studio 的单元测试中使用 Mockito/Hamcrest

    我希望能够在 Android Studio 中进行单元测试和仪器测试 并在其中使用 Mockito 我正在 Android Studio 0 8 中使用新方法进行测试 这是 使用 gradle 构建 使用官方Android API进行测试