在匕首中嘲弄注射的构造者2

时间:2015-10-18 11:20:04

标签: android dagger-2

我有一个依赖的活动:

public class MyActivity extends AppCompatActivity {

    @Inject Dependency;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // inject
    }

 }

public class Dependency {

    @Inject
    public Dependency() {
        //..
    }

 }

由于Dependency有一个注入的构造函数,Dagger2并不需要模块知道如何实例化它,这非常方便。

我的问题是:出于测试目的,我是否必须有一个提供Dependency的显式模块,以便能够模拟它并提供Dependency的模拟版本?或者有没有办法模仿Dependency没有它?

1 个答案:

答案 0 :(得分:3)

我找到了一种不创建显式模块的方法。以下是我使用Robolectric和Mockito的方式:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
public class MyActivityTest {

    @Mock AppComponent mAppComponent;
    @Mock private Dependency mDependency;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);

        // ***
        // use the mock AppComponent to perform injections
        // ***

        doAnswer(new Answer() {
            public Object answer(InvocationOnMock invocation) {
                ((MyActivity) invocation.getArguments()[0]).mDependecy = mDependecy;
                return null;
            }
        }).when(mAppComponent).inject(any(MyActivity.class));
    }
}