我正在针对主要与JUnit中的类进行交互的方法(org.apache.poi.hssf.usermodel,HSSFWorkbook和HSSFFont)编写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>
答案 0 :(得分:3)
Mocking的规则之一是:永远不要嘲笑你不拥有的类型。另一个规则是对模拟的存根调用,不应该返回另一个模拟。
原因就在你面前:)。
如果您的班级仅处理创建HSSFWorkbook
,则将测试视为集成测试并使用真实库。如果您的班级也做了其他事情,那么将所有其他内容移至其他班级(这是遵循single responsibility principle)