powermocking ProcessBuilder
のコンストラクタに問題があります。 ProcessBuilder
オブジェクトはモックされず、代わりにnew
がnull
を返します。コード:ProcessBuilderをpowermockできません
import java.util.concurrent.Executors;
public class Runner {
private ProcessBuilder processBuilder;
public ProcessBuilder getProcessBuilder() {
return processBuilder;
}
public void run() {
processBuilder = new ProcessBuilder("command", "parameter");
}
public void runInSubclass() {
final SubRunner subRunner = new SubRunner();
subRunner.run();
}
public void runInThread() {
Executors.newSingleThreadExecutor().execute(new SubRunner());
}
private class SubRunner extends Thread {
public void run() {
processBuilder = new ProcessBuilder("command", "parameter");
}
}
}
テスト(それらのすべてが失敗):
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.whenNew;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Runner.class)
public class RunnerTest {
private Runner runner;
@Before
public void setUp() throws Exception {
runner = new Runner();
ProcessBuilder processBuilderMock = mock(ProcessBuilder.class);
whenNew(ProcessBuilder.class).withAnyArguments().thenReturn(processBuilderMock);
}
@Test
public void run() throws Exception {
runner.run();
assertThat(runner.getProcessBuilder(), is(not(nullValue())));
}
@Test
public void runInSubclass() throws Exception {
runner.runInSubclass();
assertThat(runner.getProcessBuilder(), is(not(nullValue())));
}
@Test
public void runInThread() throws Exception {
runner.runInThread();
Thread.sleep(100);
assertThat(runner.getProcessBuilder(), is(not(nullValue())));
}
}
私は最新のPowerMock(1.6.6)を使用しています。
「問題があります...」正確に何が起こり、なぜそれが問題なのかを説明してください。 –
@defaultlocale、updated。 newはnullを返し、すべてのテストが失敗します。 –