###前提・実現したいこと
Mockitoを使用して、privateメソッドの単体テストを作成しています。
privateメソッド内でインスタンスをnewして、メソッド呼び出しをしている箇所をMock化し、
自分で生成したオブジェクトをそのまま返すようなテストを実行したいと考えています。
下記のように実装しましたが、NullPointerになっています。
CommandクラスをMock化しているので、sampleA内のCmd.execute
は実行されず、
when句で設定したResultが返却されると思っているのですが、どうやら実行されており、Processbuilder.start
でエラーとなっています。
###発生している問題・エラーメッセージ
Caused by: java.lang.NullPointerException at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
###該当のソースコード
java
1@RunWith(SpringRunner.class) 2@SpringBootTest 3public class SampleATest { 4 5 private static final SampleA sampleA = new SampleA(); 6 7 @Test 8 public void testExecuteCommand() throws Exception { 9 Method method = SampleA.class.getDeclaredMethod("executeCommand", Object.class, String.class); 10 method.setAccessible(true); 11 12 Result result = mock(Result.class); 13 Whitebox.setInternalState(result, "exitValue", 0); 14 15 Command command = spy(Command.class); 16 when(command.execute(anyObject(), anyObject())).thenReturn(result); 17 18 Result result2 = (Result) method.invoke(sampleA, obj, strs); 19 assertThat(result2.getExitValue(), is(0)); 20 } 21}
java
1public class SampleA { 2 private void executeCommand(Object Obj, String str) { 3 Command Cmd = new Command(); 4 Result result = Cmd.execute(obj, str); 5 if (result.getExitValue() != 0) { 6 throw new Exception("error" + result.getExitValue()); 7 } 8 } 9}
Java
1public class Command { 2 public Result execute(Object Obj, String param) { 3 Result result = new Result(); 4 5 List<String> CmdList = new ArrayList<>(); 6 CmdList.add(obj.command); 7 CmdList.add(param); 8 9 ProcessBuilder builder = new ProcessBuilder(CmdList); 10 Process process = builder.start(); 11 try { 12 result.exitValue = process.exitValue(); 13 } finally { 14 process.destroy(); 15 } 16 17 return result; 18 } 19}
###補足情報(言語/FW/ツール等のバージョンなど)
- SpringBoot 1.5.x
- JUnit 4.x
- Mockito 2.x
コードにマスクをしておりますので、不整合がありましたら申し訳ありません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。