0

我的 MyClass.java 中有这段代码:变量“C”是添加的。

btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               final MyLocalClass mlc = new MyLocalClass(A, B, C);
          }
}

我想做这样的Junit测试:获取'mlc'的实例,然后获取'mlc'中的“C”并进行比较。

    final Activity activity = getActivity();
    Field field = MyClass.class
            .getDeclaredField("mlc");
    field5.setAccessible(true);
    final MyLocalClassinstance = (MyLocalClass) field5
            .get(activity );

但是来自操作系统的错误:

junit.framework.AssertionFailedError: java.lang.NoSuchFieldExceptio

我可以获得局部最终变量的实例吗?

非常感谢。

4

1 回答 1

0

你不能像@Yam Marcovic 解释的那样。

但是您可以轻松更改代码以使其可测试:

我会让mlcActivity 本地化,而不是像这样的匿名 OnClickListener 处理类本地化

public class MyActivity : Activity {
    public MyLocalClass mlc; 
    public void Init() {
        btn.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                       mlc = new MyLocalClass(A, B, C);
                    }
        }
    }
}

这可以很容易地测试

MyActivity activity = (MyActivity) getActivity();   
// assert on activity.mlc.C
于 2012-09-19T06:53:18.710 回答