3

我有一个 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() 不是在活动本身中定义的方法。

顺便说一句,我不应该为我的测试更改任何原始源代码。

4

2 回答 2

1

您可以通过不创建这样的匿名类来测试这一点。
而是创建一个普通的内部类,并将一个新实例分配给侦听器:

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));

    }

但是为什么不只为方法写 unitestsaveEditor()呢?这已经足够了,你可以依赖它onClick()

于 2013-08-09T16:21:32.073 回答
0

onClick 方法是在匿名类中定义的,因此您不能直接调用它。相反,您需要从外部类触发点击事件。对 Android 开发了解不多,但下面的文章解释了如何使用 ActivityManager 来模拟带有 @UIthreadTest 注释的按钮单击等场景。如何在 Android JUnit 测试用例中调用 Button.performClick?

于 2013-08-09T16:21:43.883 回答