我试图创建Espresso测试,并使用mockwebserver
,问题是当我试图创建mockwebserver
时,它调用真正的api调用,我希望截获它并模拟响应。
open class App : Application(), HasAndroidInjector {
lateinit var application: Application
@Inject
lateinit var androidInjector: DispatchingAndroidInjector<Any>
override fun androidInjector(): AndroidInjector<Any> = androidInjector
override fun onCreate() {
super.onCreate()
DaggerAppComponent.factory()
.create(this)
.inject(this)
this.application = this
}
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
RetrofitModule::class,
RoomModule::class,
AppFeaturesModule::class
]
)
interface AppComponent : AndroidInjector<App> {
@Component.Factory
interface Factory {
fun create(@BindsInstance application: App): AppComponent
}
}
然后我创建了这个TestApp
class TestApp : App() {
override fun androidInjector(): AndroidInjector<Any> = androidInjector
override fun onCreate() {
DaggerTestAppComponent.factory()
.create(this)
.inject(this)
}
}
这是我的TestAppComponent
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
TestRetrofitModule::class,
AppFeaturesModule::class,
RoomModule::class]
)
interface TestAppComponent : AppComponent {
@Component.Factory
interface Factory {
fun create(@BindsInstance application: App): TestAppComponent
}
}
注意:这里我创建了一个新模块,名为TestRetrofitModule
,其中BASE_URL为“http://localhost:8080”,我不知道是否需要其他模块。
class TestRunner : AndroidJUnitRunner() {
override fun newApplication(
cl: ClassLoader?,
className: String?,
context: Context?
): Application {
return super.newApplication(cl, TestApp::class.java.name, context)
}
}
@Inject
lateinit var okHttpClient: OkHttpClient
因为它说它没有初始化。
我的mockWebServer甚至没有分发响应--尽管它没有指向真正的api调用,而是指向我放在TestRetrofitModule中的调用,问题是我必须链接mockWebServer和Retrofit。
您发布的设置看起来正确。至于没有提供app
,您可能需要在组件中绑定它,因为现在只绑定testapp
。所以你需要替换
fun create(@BindsInstance application: TestApp): TestAppComponent
与
fun create(@BindsInstance application: App): TestAppComponent
我目前正在尝试添加Espresso UI测试到我的Android应用程序,我希望能够通过它的提示字段目标TextInputEditText,然后点击它并输入一些文本。(我知道目标ID是更好的做法,但在本例中,我需要目标提示) 以下是我尝试这样做的方法: 但是,当尝试执行此操作时,我会得到以下错误: TextInputEditText{id=2131820762,res-name=input_dat
浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误
在最近迁移到Dagger2之后,我正在开发的应用程序的每个功能都使用了@ActivityScope。每个应用程序特性都是使用MVP模式实现的,并且有自己的本地dagger组件设置,它依赖于应用程序组件,以获得整个应用程序生命周期(由应用程序提供)所需的依赖关系。每个特性的activity都将一个提供主要应用程序组件的基类扩展到一个由每个activity覆盖的方法,以便设置本地dagger组件(构建
我在做Espresso测试时遇到了一个问题,我知道Espresso不能处理动画,所以我在下面做了。-禁用我的测试设备窗口动画,过渡动画和动画师持续时间比例都设置为关闭(这不起作用)-然后我试图在我的代码中添加一个标志(如。espresso_testing=true。如果为true,我的代码将跳过调用所有startAnimation()函数调用。--->这很管用。然而,在编写espresso测试用例
null 动画/转换被禁用,但这不会阻止CircularProgressLayout动画化。 我尝试,但即使这样,在第一次单击和第二次单击之间也要等待2秒。 我还试图滥用作为黑客来确认退出应用程序。这确实有效,但这是一个黑客。我只想让浓缩咖啡点击两次。 有什么建议如何使浓缩咖啡点击两次而不等待动画?
我有一个矢量绘图,我想用浓咖啡测试。 矢量可绘制:ic_video_24dp 我有没有办法用浓缩咖啡对矢量绘图进行UI测试?任何帮助都将不胜感激。