Io 使用PowerMockito模拟经过修饰的流
所以我有一个类,它在构造函数中接受OutputStream,并在方法中从中创建一个PrintWriter。问题是如何让这个PrintWriter验证它Io 使用PowerMockito模拟经过修饰的流,io,inputstream,powermock,outputstream,word-wrap,Io,Inputstream,Powermock,Outputstream,Word Wrap,所以我有一个类,它在构造函数中接受OutputStream,并在方法中从中创建一个PrintWriter。问题是如何让这个PrintWriter验证它 Example public Class(OutputStream output) {} public void foo() { PrintWriter writer = new PrintWriter(output); } 我想做的是: PrintWriter writer = PowerMockito.mock(PrintWriter.
Example public Class(OutputStream output) {}
public void foo() {
PrintWriter writer = new PrintWriter(output);
}
我想做的是:
PrintWriter writer = PowerMockito.mock(PrintWriter.class)
PowerMockito
.whenNew(PrintWriter.class)
.withArguments(output)
.thenReturn(writer);
然而,我得到的是,没有与这位作家的互动。任何帮助都将不胜感激。如果您使用PowerMock配置提供完整的代码片段将更好。然后我可以帮你并给你建议,现在我可能只能猜出什么是错的,但我正在努力:
PrintWriter
有几个构造函数可以接受OutputStream
,而PowerMock有一个缺陷,当类重载构造函数时只传递参数时,它可能会错误地猜测被模拟的构造函数
还有一个常见的错误,您没有将创建PrintWriter
实例的类添加到@PrepareForTest
因此,在我的假设案例的基础上进行了示例:
public class PrintWriterCreator {
private final PrintWriter printWriter;
public PrintWriterCreator(OutputStream outputStream) {
this.printWriter = new PrintWriter(outputStream);
}
public void write(String message){
printWriter.write(message);
}
}
测试等级:
@RunWith(PowerMockRunner.class)
@PrepareForTest({PrintWriter.class, PrintWriterCreator.class})
public class PrintWriterCreatorTest {
@Mock
private OutputStream outputStream;
@Mock
private PrintWriter printWriterMock;
private PrintWriterCreator printWriterCreator;
@Before
public void setUp() throws Exception {
whenNew(PrintWriter.class).withParameterTypes(OutputStream.class).withArguments(eq(outputStream)).thenReturn
(printWriterMock);
printWriterCreator = new PrintWriterCreator(outputStream);
}
@Test
public void testWrite() throws Exception {
String message = "someMessage";
printWriterCreator.write(message);
verifyNew(PrintWriter.class).withArguments(outputStream);
verify(printWriterMock).write(eq(message));
}
}