java - 对方法内部声明的方法进行单元测试

标签 java android junit

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

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

最佳答案

你可以通过不创建这样一个异常类来测试它。
而是创建一个普通的内部类,并将一个新实例分配给监听器:

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() 可以正常工作。

关于java - 对方法内部声明的方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18150868/

相关文章:

java - 抽象对象列表的 Jaxb 解码

android - 错误 : Could not find method armeabi-v7a() for arguments [arm64-v8a]

java - 使用两个、三个依赖类模拟、 stub 进行 Junit 测试。有关 Junit 教程和示例的任何推荐

java - 如何解决 CCRC View 更新期间的此错误?

java - 有没有办法检查两个对象在 Java 中是否有别名?

android - 开始构建时出错 - App Center 上的 Android 构建失败

java - Mockito:如何模拟 javax.inject.Provider 创建的原型(prototype) bean?

java - 配置 ant 以运行单元测试。图书馆应该在哪里?类路径应该如何配置?避免 ZipException

java - 将 Dataset<Row> 中的行映射到对象类 Spark Java

java - Android 6.0 打开失败 : EACCES (Permission denied)