我有一个Android应用程序,其中一个Activity的onCreate()方法内部按钮定义为具有onClick方法。在代码中:
public void onCreate(Bundle savedInstanceState) {
/.../
buttonSave = (Button) findViewById(R.id.store_button_save);
buttonSave.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
saveEditor(v);
}
});
/.../
}
我的问题是,如何从Android单元测试中调用此嵌套方法onCLick()? myActivity.onClick(myButton)
不起作用,因为onClick()不是活动本身定义的方法。
答案 0 :(得分:1)
您可以通过不创建这样的anoynmous类来测试它 而是创建一个普通的内部类,并为侦听器分配一个新实例:
public static class MyClickListener implements OnClickListener {
Editor editor;
public MyClickListener(Editor e) {
this editor= e;
}
public void onClick(View v) {
editor.saveEditor(v);
}
}
buttonSave.setOnClickListener(new MyClickListener());
在JuniTest中
public void testOnClickListener() {
Editor e = new Editor();
MyClickListener l = new MyClickListener(e);
l.onClick();
// however you check for correct result
assertTrue(checkSaveEditor(e));
}
但为什么不只为方法saveEditor()
编写unitest?
这已足够,您可以依赖onClick()
。
答案 1 :(得分:0)
onClick方法是在匿名类中定义的,因此您无法直接调用它。相反,您需要从外部类触发click事件。不太了解Android开发,但以下文章解释了如何使用ActivityManager测试场景,以使用@UIthreadTest注释模拟按钮单击。 How to call Button.performClick in Android JUnit test case?