您好,我正在为一项看似非常简单的任务而苦苦挣扎。我需要编写一个 expresso 单元测试,但我需要该活动使用模拟类而不是它在正常运行期间使用的类。
我看到的最接近的解决方案在这里:
取消或覆盖在 Espresso 测试下的 Activity 中进行的 API 调用
但这需要应用程序级别的 getter 和 setter,并且只处理常量。
下面是一个想做的简单例子:
活动:
public class MainActivity2 extends AppCompatActivity {
// how do I mock this without using any branches
// just have expresso replace with MainActivity2CustomClass with a mock?
private MainActivity2CustomClass mainActivity2CustomClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mainActivity2CustomClass = new MainActivity2CustomClass();
mainActivity2CustomClass.foo();
}
}
我想模拟的课程
// Need expresso to replace this class with a mock
public class MainActivity2CustomClass {
void foo() {
}
}
为了澄清,我需要使用具有多个类的大型应用程序来执行此操作。所以使用分支不是我寻求的解决方案。例如,这不适用于我的应用程序
// I DO ***NOT** WANT THIS solution since it will explode in many branches in my application
Intent intent = new Intent(targetContext, PatientActivity.class);
intent.putExtra("istestrunning", 2);
// etc...
// Not acceptable solution for my problem, creates too many branches and messy code
if (getIntent().getIntExtra("istestrunning", 0) == 2) {
mainActivity2CustomClass = new MainActivity2CustomClass();
mainActivity2CustomClass.foo();
} else {
mainActivity2CustomClass2 = new MyMock();
mainActivity2CustomClass2.foo();
}
我想知道是否可以让 expresso 在测试时简单地替换该类。可以做到吗?
任何帮助或线索表示赞赏。
谢谢你。