在内部使用私有支持方法对公共方法进行单元测试吗?

时间:2019-05-09 02:56:01

标签: java unit-testing testing junit encapsulation

当尝试在我的JSF应用程序上执行测试驱动的开发时,我很难理解如何使我的类更具可测试性和解耦性。例如:

@Test
public void testViewDocumentReturnsServletPath(){
    DocumentDO doc = new DocumentDO();
    doc.setID(7L);
    doc.setType(“PDF”);
    DocumentHandler dh = new DocumentHandler(doc);
    String servletPath = dh.viewDocument();
    assertTrue(servletPath, contains(“../../pdf?path=“);
}

(仅根据我目前的知识)这是可测试的,前提是我删除了viewDocument()中一些旨在与外部资源(如DB)进行交互的支持私有方法。

如何使用内部支持这些私有方法的方法来对公共API进行单元测试?

1 个答案:

答案 0 :(得分:4)

单元测试通常包括模拟外部依赖关系,功能依赖于外部依赖关系以获得受控输出。这意味着,如果您的私有方法调用了API,则可以使用Mockito之类的框架来强制使用特定的返回值,然后使用该返回值来确保代码以您期望的方式处理该值。例如,在Mockito中,它看起来像:

when(someApiCall).thenReturn(someResource);

如果您希望与测试方法无法控制的数据库或任何其他外部资源进行交互,则采用相同的结构。