gpt4 book ai didi

java - 在不使用 Dagger 的情况下使用 Espresso ActivityTestRule 初始化时模拟 Activity 的 onCreate

转载 作者:行者123 更新时间:2023-11-30 00:00:59 26 4
gpt4 key购买 nike

我尝试用 espresso 初始化我的 Activity 并模拟 onCreate 但没有找到一个好的解决方案,而不是将 Dagger 添加到我的项目中:

@Rule
public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<>(MyActivity.class);

我也尝试创建一个自定义规则,但这没有帮助,因为我无法在创建 Activity 之前模拟该 Activity ...只有在创建之后,但是此时的onCreate已经被调用了。

public class MyCustomRule<A extends MyActivity> extends ActivityTestRule<A> { ....
@Override
protected void beforeActivityLaunched(){super.beforeActivityLaunched();}
@Override
protected Intent getActivityIntent() {...}
@Override
protected void afterActivityLaunched() {...}
@Override
protected void afterActivityFinished() {...}
}

最佳答案

我通过使用 SingleActivityFactory 找到了解决我遇到的问题的方法:

private SingleActivityFactory<MyActivity> injectedFactory = new SingleActivityFactory<MyActivity>(MyActivity.class) {
@Override
protected MyActivity create(Intent intent) {
MyActivity activity = new MockMyActivity();
return activity;
}
};

并使用它来创建规则

@Rule
public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<>(injectedFactory, false, true);

你的 MockMyActivity.class 看起来像这样:

public class MockMyActivity extends MyActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// you can add some of your logic here
}

@Override
protected MyFragment findOrCreateViewFragment() {
MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.contentFrame);
if (myFragment == null) {
//spy-mock your fragment
myFragment = spy(new MyFragment());
// ex do not load data from the web service
doNothing().when(myFragment).callLoadMyService();

ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), myFragment, R.id.contentFrame);
}
return myFragment;
}

关于java - 在不使用 Dagger 的情况下使用 Espresso ActivityTestRule 初始化时模拟 Activity 的 onCreate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49915101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com