Junitにてprivateメソッドを試験する際に、DIが実施されず、NullPointExceptionが発生してしまいます。(下記のソースの「otherclass」にnullが格納されている。)
privateメソッドを直接呼び出した際に、DIを実施する方法はありますでしょうか?
諦めて、publicメソッド経由で試験するしかないのでしょうか?
当方、Javaの経験は5年近くあるのですが、Springを使用した経験があまりなく、理解が不足している個所が多々あるかと思いますが、ご容赦ください。指摘していただけると幸いです。
※DIがどのタイミングで実施されるかを正しく理解していません。
privateメソッドをテストする際はインスタンスを自分で生成しているため、DIが行われていないのかと考えております。
下記のような構成で試験を行っています。
※publicメソッドをテストした際にエラーは発生していないので、基本的な設定関連は問題ないと考えています。
Java
1// テスト対象のクラス 2// Base.java 3@Service 4public abstract class BaseImpl implements Base { 5 @Autowired 6 OtherClass otherclass; 7 8 public void publicMethod() { 9 privateMethod(); 10 } 11 // ここをテストしたい 12 private void privateMethod(String str1, String str2) { 13 // ↓NullPointExceptionが発生する。 14 otherclass.publicMethod(); 15 } 16 17 private abstarct void abstractMethod(); 18} 19 20// テスト対象が抽象クラスのため、Baseクラスを継承したテスト用のクラスを用意 21// DummyMain.java 22public class DummyImpl implements Dummy { 23 public void mainDummy() { 24 publicMethod(); 25 } 26 private void adstractMethod() { // 省略 } 27} 28 29// テスト用のクラス 30// TestBaseClass.java 31public class TestBaseClass { 32 @Autowired 33 DummyImpl dummyimpl; 34 35 @Test 36 public void testPublicMethod() { 37 dummyimpl.publicMethod(); 38 } 39 40 @Test 41 public void testPrivateMethod() { 42 DummyImpl target = new DummyImpl (); 43 Method method = DummyImpl .class.getDeclaredMethod("privateMethod", String.class, String.class); 44 method.setAccessible(true); 45 method.invoke(target, "文字列1", "文字列2") 46 } 47}
お手数ですが、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/29 07:44
2018/05/12 11:02