Android espresso匕首测试。嘲弄构造函数注入

时间:2018-05-11 17:35:22

标签: mocking dagger-2

我有一个活动,并通过构造函数注入注入了presenter。像这样的东西

public class RegistrationActivity extends AppCompatActivity {

    @Inject
    RegistrationPresenter registrationPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    SampleApplication.instance.getApplicationComponent().inject(this);
}


public class RegistrationPresenter {
    @Inject
    public RegistrationPresenter{
    } 
}

我正在尝试模拟演示者并将其注入活动中。但只有在模块中提供了演示者时才有效。我怎么能模仿并注入我的演示者? 感谢

1 个答案:

答案 0 :(得分:0)

自Android 9起可以使用 check this article

在旧版本中,您需要创建单独的组件进行测试。

class TestApplication : MyApplication() {
    override val component: TestComponent by lazy {
        DaggerTestComponent.builder().applicationModule(ApplicationModule(this)).build()
    }
}

自定义跑步者:

class TestRunner : AndroidJUnitRunner() {
    @Throws(InstantiationException::class, IllegalAccessException::class, ClassNotFoundException::class)
    override fun newApplication(cl: ClassLoader, className: String, context: Context): Application {
        return super.newApplication(cl, TestApplication::class.java.name, context)
    }
}

并在build.gradle文件中注册跑步者:

 defaultConfig {
        testInstrumentationRunner "com.package.TestRunner"
    }

TestComponent中,您现在可以将模块与测试实现RegistrationPresenter相连