测试和运行时从不同来源获取数据

时间:2018-06-25 10:34:22

标签: java spring junit

我有一个Spring应用程序,可从API获取数据。我们对Jenkins进行了测试,问题是Jenkins无法访问此API。 因此,我们的解决方案是将带有这些API端点的一些示例文件嵌入到src/test/resources中。 但是代码变得一团糟,因为我不知道在测试还是运行中如何区别。

例如:

private void loadDataFromEndpointOne(boolean isTest) {

    List<String> someData = new ArrayList<>();

    if (isTest) {
        ClassLoader loader = this.getClass().getClassLoader();
        String file = loader.getResource("endpointOne.txt"); 
        ...
        someData = someMethodReadingResourceFile();
    }
    else {
        someData = someMethodReadingFromAPI();
    } 
}

因此,从JUnit @Test开始,我将isTest设置为true,从运行时设置为false。 这对我来说听起来并不优雅。

有聪明的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您正在编写JUnit测试,最好使用Mockito或PowerMockito(或与此有关的任何其他库)来模拟API调用。多数民众赞成在更清洁的方式进行JUnit测试。 例如,如果您有:

private void loadDataFromEndpointOne() {
        someData = someMethodReadingFromAPI();
}

从您的测试课程中像这样模拟它:

Mockito.when(mockedClass.loadDataFromEndpointOne()).thenReturn(someDummyDataForTest);

有关更多信息,请参阅Mockito的文档。