
[code]

    ■MyAbstractClass.java
    public abstract class MyAbstractClass {
        public MyAbstractClass() {
        }
        public abstract int notifyAbs(int a);
    }
    
    ■MyClassAbstractInnnerClass.java
    public class MyClassAbstractInnnerClass{
        private MyAbstractClass testAbstract = new MyAbstractClass() {
            @Override
            public int notifyAbs(int a) {
                return a;
            }
        };
    }
    
[/code]

上記のような抽象クラスを継承したprivateクラスのインスタンス(testAbstract)が持つメソッド(notifyAbs)への外部からのアクセスは可能でしょうか？  
JUnitでnotifyAbsの試験をしたいのですが、アクセス方法がわからずに困っています。


CC BY-SA 3.0
2017-09-11T08:22:32.617
37869
2017-09-12T11:27:18.733
25322
question
java junit
抽象クラスを継承したクラスをインナークラスとしてprivateで宣言し、外部からアクセスしたい


「junit privateメソッド テスト」でネットを検索すればいろいろ出てきます。  
たとえば以下。

[code]

    Method method = Sample.class.getDeclaredMethod("getName", Integer.class);
    method.setAccessible(true);
    String resutl = (String)method.invoke(new Sample(), new Integer(1));
    
[/code]

参考： <http://javatechnology.net/java/private-junit/>


CC BY-SA 3.0
2017-09-12T00:50:02.787
37882
2017-09-12T00:50:02.787
37869
answer


ご回答ありがとうございます。privateクラスやprivateメソッド、インナークラスへのアクセスについては実現できて‌​いるのですが、掲題のようなabstrac‌​tクラスを継承したフィールドでかつ、中に‌​メソッドがあるケースではどうしても実現が‌​できませんでした。

[code]

    public class MyClassAbstractInnnerClass{
        private InnerClass testAbstract = new InnerClass();
        public class InnerClass extends MyAbstractClass{
            @Override
            public int notifyAbs(int a) {
                return a;
            }
        }
    }
    
[/code]

よって、上記のようにフィールドの宣言と処理をわけることでnotifyAbs()へのアクセスを実現しました。


CC BY-SA 3.0
2017-09-12T11:27:18.733
37894
2017-09-12T11:27:18.733
25322
37869
answer