gpt4 book ai didi

android - 将模拟 Retrofit API 服务实例注入(inject) ActivityInstrumentTestCase2

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:31 24 4
gpt4 key购买 nike

我想使用 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 的情况下解决这个问题的另一种方法(添加对它的支持对于正在进行的项目来说将是一项艰巨的任务),将具有集成测试的风格。例如。具有 releasedebugmock 风格。

然后您可以在 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

ma​​in/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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com