前提・実現したいこと
どなたか、解決策をご教示いただけますでしょうか。
Javaにて、JUnit+PowerMockでテストを行っております。
privateメソッド(下ソース:SampleProp#getPropValue)をMock化しようとしたところ、
SamplePropTest#test001 メソッドの
. PowerMockito.when(mock, "getPropValue", anyObject(), eq("AAA")).thenReturn("AAAValue");
の場所で、以下のエラーが発生してしまいました。
もう1つ引数なしのメソッド「duplicateCheck」をモック化しているのですが、
こちらはwhenの時点でメソッド内に入らないのですが、
「getPropValue」は when~の時点でメソッド内に入ってしまいます。
引数の書き方に問題があるのでしょうか?
お手数をおかけいたしますが、よろしくお願いいたします。
.
発生している問題・エラーメッセージ
java.lang.NullPointerException at sample.SampleProp.getPropValue(SampleProp.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sample.SamplePropTest.test001(SamplePropTest.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316) at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123) at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
該当のソースコード
Java
1package sample; 2 3import java.io.FileInputStream; 4import java.util.Properties; 5 6/** 7 * テスト対象クラス. 8 * 9 * @author miyako 10 */ 11public class SampleProp { 12 13 private static SampleProp __instance = new SampleProp(); 14 15 private SampleProp(){ 16 } 17 18 public static synchronized SampleProp getInstance() { 19 return __instance; 20 } 21 22 public synchronized void load() throws Exception { 23 24 Properties prop = new Properties(); 25 FileInputStream fis = null; 26 27 try { 28 this.duplicateCheck(); 29 30 fis = new FileInputStream("aaa.properties"); 31 prop.load(fis); 32 33 String item = this.getPropValue(prop, "myid"); 34 35 } 36 finally { 37 if (fis != null) { 38 try { 39 fis.close(); 40 } catch (Exception e) {} 41 } 42 } 43 } 44 45 private String getPropValue(Properties prop, String key) 46 throws Exception { 47 48 String ret = prop.getProperty(key); 49 if (ret == null) { 50 ret = "Not Key."; 51 } 52 if (ret.isEmpty()) { 53 ret = "Not Value."; 54 } 55 56 return ret; 57 } 58 59 private void duplicateCheck() { 60 // 重複チェック処理 61 } 62}
Java
1package sample; 2 3import static org.mockito.Matchers.*; 4 5import org.junit.After; 6import org.junit.Before; 7import org.junit.Test; 8import org.junit.runner.RunWith; 9import org.powermock.api.mockito.PowerMockito; 10import org.powermock.core.classloader.annotations.PrepareForTest; 11import org.powermock.modules.junit4.PowerMockRunner; 12 13import junit.framework.TestCase; 14 15/** 16 * テストクラス. 17 * 18 * @author miyako 19 */ 20@RunWith(PowerMockRunner.class) 21@PrepareForTest({SampleProp.class}) 22public class SamplePropTest extends TestCase{ 23 24 public SamplePropTest(String name) { 25 super(); 26 } 27 28 @Before 29 public void setUp() throws Exception { 30 31 } 32 33 @After 34 public void tearDown() throws Exception { 35 36 } 37 38 @Test 39 public void test001() throws Exception{ 40 41 SampleProp mock = PowerMockito.spy(SampleProp.getInstance()); 42 PowerMockito.doNothing().when(mock, "duplicateCheck"); 43 44 PowerMockito.when(mock, "getPropValue", anyObject(), eq("AAA")).thenReturn("AAAValue"); 45 46 try { 47 //============================== 48 // テスト実施 49 //------------------------------ 50 mock.load(); 51 52 //============================== 53 // 結果確認 54 //------------------------------ 55 56 } 57 // 予期せぬ例外 58 catch(Throwable e) { 59 e.printStackTrace(); 60 fail(e.getMessage()); 61 } 62 // 後処理 63 finally { 64 } 65 66 } 67 68} 69
補足情報(FW/ツールのバージョンなど)
・JRE:1.7.80
・JUnit:4.12
・PowerMock:1.6.6
・Mockito:1.10.19
・Eclipse:4.7

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/01 05:14
2018/06/01 07:41
2018/06/03 12:59