3 回答

TA貢獻(xiàn)1806條經(jīng)驗 獲得超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");
}
這個例子假設(shè)了一些關(guān)于你的Status對象的事情,但你有一般的想法。對于斷言,我使用AssertJ,但您可以使用 JUnit5 內(nèi)置斷言執(zhí)行相同操作。

TA貢獻(xiàn)1856條經(jīng)驗 獲得超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貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
稍微重構(gòu)一下,其中 Builder 是注入到該組件中的 Spring Bean。
然后,您可以模擬該構(gòu)建器以返回模擬的 StatefulBeanToCsv,特別是 write 方法,您可以在其中編寫條件和斷言。如果遇到錯誤,則拋出一些未經(jīng)檢查的異常,例如 IllegalStateException,如果一切正常,則不拋出任何內(nèi)容
添加回答
舉報