3 回答
TA贡献1806条经验 获得超5个赞
你不需要 mockito 来测试这个方法,只需要一个java.io.StringWriter.
以下是如何编写用于名义用途的测试:
@Test
void status_written_in_csv_format() {
// Setup
WriteCsvToResponse objectUnderTest = new WriteCsvToResponse ();
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
// Given
Status status = ...
// When
objectUnderTest.writeStatus(printWriter, status);
// Then
String actualCsv = stringWriter.toString();
assertThat(actualCsv.split("\n"))
.as("Produced CSV")
.containsExactly(
"id,storeId,status",
"42,142,OK");
}
这个例子假设了一些关于你的Status对象的事情,但你有一般的想法。对于断言,我使用AssertJ,但您可以使用 JUnit5 内置断言执行相同操作。
TA贡献1856条经验 获得超5个赞
您可以编写这样的测试并更改 write 方法中的输入:
@Test
public void test() {
WriteCsvToResponse writeCsvToResponse = mock(WriteCsvToResponse.class);
doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
write((Status)args[1]);
return null;
}
}).when(writeCsvToResponse).writeStatus(any(PrintWriter.class),any(Status.class));
writeCsvToResponse.writeStatus(writer, status);
}
public void write(Status status) {
// do anythings you like with status
}
TA贡献1934条经验 获得超2个赞
稍微重构一下,其中 Builder 是注入到该组件中的 Spring Bean。
然后,您可以模拟该构建器以返回模拟的 StatefulBeanToCsv,特别是 write 方法,您可以在其中编写条件和断言。如果遇到错误,则抛出一些未经检查的异常,例如 IllegalStateException,如果一切正常,则不抛出任何内容
添加回答
举报