写作单元测试,需要2个列表

时间:2018-07-12 14:35:14

标签: java spring junit

我是一名新的Junit学习者,我想根据2个列表类测试我的代码。但是我从未见过这样的例子。

我的真实代码如下:

public static List<JourneyType> applyFilter(List<JourneyType> journeyList, List<AvailabilityFilterOptionType> filterOptions)
{
    List<JourneyType> filteredJourneyList = new ArrayList<>();

    filteredJourneyList = applyStopFilters(journeyList, filterOptions);
    filteredJourneyList = applyCarrierFilters(filteredJourneyList, filterOptions);
    filteredJourneyList = applyRbdFilters(filteredJourneyList, filterOptions);
    filteredJourneyList = applyDurationFilter(filteredJourneyList, filterOptions);
    return filteredJourneyList;
}

和我的测试场景:

@Test
public void testApplyFilter() 
{
    fail("Not yet implemented");
}

谢谢您

1 个答案:

答案 0 :(得分:3)

实际上,这很简单。

@Test
public void testApplyFilter() 
{
    assertThat(someObject.applyFilter(journies, filters), is(expectedOutcome));
}

换句话说:您知道此方法应该做什么。 (嗯,这些知识是测试内容的前提条件。当您不知道代码在做什么时,通过测试来验证其正确性是没有意义的。)

例如:给定一些已知的输入数据,您应该能够对输出返回的情况做出期望。这就是您要检查的内容。

当然,棘手的部分 可能是正确识别依赖项,并在需要时对其进行模拟。

但理想情况下,您的测试应该是:测试被测方法的公共合同。出现问题,然后检查返回的输出是否符合您的期望。理想情况下,您不必为测试进行任何模拟,因为您根本不依赖于测试实现细节。您只需测试公共合同“给出的输入,这就是预期的输出”。

(其中:assertThat()只是断言的另一种类型,而is()hamcrest的匹配器。还有许多其他hamcrest匹配器,例如containsInAnyOrder()(如果您不关心返回的元素的顺序,那确实很整洁,但是必须了解使用的方式略有不同,这需要使用containsInAnyOrder(expectedOutcomeList.toArray())方法)