Java 在静态方法中模拟构造函数

Java 在静态方法中模拟构造函数,java,unit-testing,powermock,processbuilder,Java,Unit Testing,Powermock,Processbuilder,下面是我试图进行单元测试的代码 public final class ClassToBeTested { public static void function(String arg) { ProcessBuilder pb = new ProcessBuilder(arg); //Using pb here } } 我想在这里模拟构造函数调用(新文件(arg)) 我试过使用Power Mock: @PrepareForTest({ClassTo

下面是我试图进行单元测试的代码

public final class ClassToBeTested {
    public static void function(String arg) {
        ProcessBuilder pb = new ProcessBuilder(arg);
        //Using pb here
    }
}
我想在这里模拟构造函数调用(新文件(arg)) 我试过使用Power Mock:

@PrepareForTest({ClassToBeTested.class})
public class TestClass {
    @Test
    public void functionTest() throws Exception {
        String str = "abc";
        ProcessBuilder mockProcessBuilder = PowerMock.createMock(ProcessBuilder.class);

        PowerMock.expectNew(ProcessBuilder.class, str).andReturn(mockProcessBuilder);

        PowerMock.replay(mockProcessBuilder, ProcessBuilder.class);

        ClassToBeTested.function(abc);

    }
}
这似乎不起作用。因为新ProcessBuilder(arg)没有返回模拟对象。

添加
@RunWith(PowerMockRunner.class)
有助于解决此问题


同时使用
PowerMock.replayAll()

即使它能工作,在我看来也是无用的-构造函数调用永远不能返回
null
,那么为什么要在它返回时测试一个情况呢?你为什么要模拟
文件
(接下来,你通常会使用
重播(fileMock,File.class)
)实际上File和null的使用只是一个例子,那么你给出一个不涉及
null
的例子,这样你就可以适当地调用
重播
?(根据我链接到的文档)添加了我想要测试的确切代码