如果我们只使用普通匕首2.在application
类中,我们将拥有一个保存AppComponent
的属性。然后我们可以在espresso测试期间交换它。
但是当我使用dagger-android 2.15
设置项目时。如果采用过多的Dagger魔法,事情会变得更加隐含。代码更干净,但测试有点困难。
这是application
类:
class App : DaggerApplication() {
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent
.builder()
.create(this)
.build()
}
}
这是HomeActivity
class HomeActivity : DaggerAppCompatActivity() {
@Inject
lateinit var userPreference: UserPreference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
if (!this.userPreference.memberRegistered) {
goToActivity(EntryActivity::class.java)
}
}
}
以此代码为例。如何模拟注入的userPreference.memberRegistered
哪个可能是下面的HTTP调用?
答案 0 :(得分:1)
对于那些对此感兴趣的人,我得到了blog一步一步的细节:
基本上,这个想法是:
然后事情很简单:
没有DaggerMock
使用DaggerMock
它通过@AutonomousApps的解决方案激发灵感,但现在你不需要为每个测试类编写@ Component,@ Module。
答案 1 :(得分:0)
尝试了几种方法之后,this是唯一对我有用的方法。
答案 2 :(得分:-1)
I wrote a blog post that explains how to do this just yesterday: https://dev.to/autonomousapps/the-daggerandroid-missing-documentation-33kj
I don't intend to repeat the entire post for this answer (it's hundreds of words and lines of code to properly set up a test harness with Dagger), but to attempt to summarize:
debug
source set (I assume it would also work in the androidTest
source set, but I have not tried this).AndroidManifest.xml
in the same source set.