I have a simple Fragment like so:
class SomeFragment : DaggerFragment() {
...
}
Now I want to test this Fragment using FragmentScenario
class LoginFragmentTest {
@Test
fun test() {
launchFragmentInContainer<SomeFragment>()
onView(withId(R.id.someButton))
.check(matches(isDisplayed()))
}
}
But everytime I try to the test its always:
java.lang.IllegalArgumentException: No injector was found for <...SomeFragment>
How can I properly run the test? Can anybody help me here?
I found two ways to solve the problem:
typealias,DaggerFragmentand special test variants of your fragmentsI consider the first approach cleaner and would recommend to use it rather than the latter, but I'll describe both of them, so you can make your own choice.
Build flavors with
typealiasmockandprod:app/build.gradletypealiasdepending on the flavor, let's call itBaseFragment:prodflavor,app/src/prod/com.example.mypackage/BaseFragment.ktmockflavor,app/src/mock/com.example.mypackage/BaseFragment.ktBaseFragmentalias in your fragments:FragmentScenarioswitch from theprod*build variant to themock*one and set all the dependencies that are supposed to be injected somewhere in your test class (e.g. using mocks)Own
DaggerFragmentand test variants of the fragmentsDaggerFragment(based on the actualdagger.android.support.DaggerFragmentimplementation):DaggerFragmentimplementation and set the fragmentopen:injectMembersmethod:TestSomeFragmentin your tests.