在测试方法中寻找替换许多“when ... thenReturn”语句的方法

时间:2012-10-17 20:50:54

标签: junit mockito

我正在针对主要与JUnit中的类进行交互的方法(org.apache.poi.hssf.usermodelHSSFWorkbookHSSFFont)编写HSSFCellStyle测试。

该方法最终构建并返回HSSFWorkbook对象。

为了构建HSSFWorkbook对象,会调用workbook.createFont()workbook.createCellStyle()等方法。

我目前在单元测试的setup类中嘲笑这样的对象

workbook = mock(HSSFWorkbook.class);
font = mock(HSSFFont.class);
cellStyle = mock(HSSFCellStyle.class);

然后,在我的测试方法中,我调用以下内容来避免NPE

when(workbook.createFont()).thenReturn(font);
when(workbook.createCellStyle()).thenReturn(cellStyle);

我发现我必须做更多这些以避免NPE,我想知道是否有一种方法可以避免写出所有这些“当......然后回复”的陈述。 / p>

1 个答案:

答案 0 :(得分:3)

Mocking的规则之一是:永远不要嘲笑你不拥有的类型。另一个规则是对模拟的存根调用,不应该返回另一个模拟。

原因就在你面前:)。

如果您的班级处理创建HSSFWorkbook,则将测试视为集成测试并使用真实库。如果您的班级也做了其他事情,那么将所有其他内容移至其他班级(这是遵循single responsibility principle