我有以下方法:
@Component
public class WriteCsvToResponse {
private static final Logger LOGGER = LoggerFactory.getLogger(WriteCsvToResponse.class);
public void writeStatus(PrintWriter writer, Status status) {
try {
ColumnPositionMappingStrategy mapStrategy
= new ColumnPositionMappingStrategy();
mapStrategy.setType(Status.class);
String[] columns = new String[]{"id", "storeId", "status"};
mapStrategy.setColumnMapping(columns);
StatefulBeanToCsv btcsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.withMappingStrategy(mapStrategy)
.withSeparator(',')
.build();
btcsv.write(status);
} catch (CsvException ex) {
LOGGER.error("Error mapping Bean to CSV", ex);
}
}
我不知道如何使用mockito
对其进行正确的测试。
使用它可以将对象状态包装为csv
格式。
我使用StringWriter将响应包装在其中。
没有更多的细节了,但是看来我必须创建一些单词才能通过验证:)
答案 0 :(得分:1)
经过一些重构,其中Builder是注入到该组件中的Spring Bean。
然后,您可以模拟该构建器以返回模拟的StatefulBeanToCsv,特别是write方法,您可以在其中编写条件和断言。如果遇到错误,则会抛出一些未经检查的异常,例如IllegalStateException,如果一切正常,则不会抛出任何东西
答案 1 :(得分:1)
您可以编写这样的测试,并在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
}