- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用 Espresso 为 Activity 编写功能测试,使用通过 MockRestAdapter ( https://github.com/square/retrofit/blob/master/retrofit-mock/src/main/java/retrofit/MockRestAdapter.java ) 创建的模拟 Retrofit API 服务实例。
但这有点棘手,因为您无法真正通过 Activity 的构造函数注入(inject)任何依赖项。
目前,单个 Retrofit API 服务实例存在于我的 Application 对象中,我在我的每个 Activity 的 onCreate()
方法中创建了一个对它的引用。
如何换入模拟 Retrofit API 服务?也许 Dagger 是答案?
最佳答案
是的,Dagger 就是答案。关于如何实现这一点,我建议查看 Jake Wharton 的 u2020 Github .简而言之,您为生产和调试风格提供不同的 API 实现。或者,您可以对集成测试使用单独的风格。
在没有 Dagger 的情况下解决这个问题的另一种方法(添加对它的支持对于正在进行的项目来说将是一项艰巨的任务),将具有集成测试的风格。例如。具有 release
、debug
和 mock
风格。
然后您可以在 Android Manifest 中为 mock
风格设置一个不同的 Application
类 - 一个使用模拟适配器的实现。这里的核心思想是您可以覆盖或扩充您的主要 AndroidManifest 风格。
大致是这样的:
项目结构
app/
src/
main/
AndroidManifest.xml - Activities, services, permissions - all the stuff goes here
java/.../MyApplication.java
mock/
AndroidManifest.xml - example below
java/.../MockApplication.java
debug/ - Not relevant for this example
release/ - Not relevant for this example
main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.android" >
<!-- Permissions etc -->
<application
android:name=".MyApplication"
...
>
<!-- Activities, services etc -->
</application>
</manifest>
模拟/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:name=".MockApplication"/>
</manifest>
应用程序.java
public class MyApplication extends Application {
@Override public void onCreate(Bundle savedState) {
MyApi api = createApiAdapter();
}
protected MyApi createApiAdapter() {
// Create regular Retrofit adapter
}
}
MockApplication.java
public class MockApplication extends MyApplication {
@Override protected MyApi createApiAdapter() {
// Create mock Retrofit adapter
}
}
build.gradle
android {
// ...
buildTypes {
mock {
applicationIdSuffix '.mock'
versionNameSuffix '-mock'
debuggable true
}
debug {
applicationIdSuffix '.dev'
versionNameSuffix '-dev'
debuggable true
}
release {
signingConfig signingConfigs.release
}
}
}
关于android - 将模拟 Retrofit API 服务实例注入(inject) ActivityInstrumentTestCase2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26445688/
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!