0

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

该方法最终构建并返回一个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,我想知道是否有一种方法可以避免编写所有这些“when...thenReturn”语句。

4

1 回答 1

3

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

原因就在你面前:)。

如果您的课程处理创建HSSFWorkbook,那么将测试视为集成测试并使用真正的库。如果您的班级也做了其他事情,那么将所有其他内容移至其他班级(这是为了遵循单一责任原则

于 2012-10-17T21:14:03.353 回答