我是一名新的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");
}
谢谢您
答案 0 :(得分:3)
实际上,这很简单。
@Test
public void testApplyFilter()
{
assertThat(someObject.applyFilter(journies, filters), is(expectedOutcome));
}
换句话说:您知道此方法应该做什么。 (嗯,这些知识是测试内容的前提条件。当您不知道代码在做什么时,通过测试来验证其正确性是没有意义的。)
例如:给定一些已知的输入数据,您应该能够对输出返回的情况做出期望。这就是您要检查的内容。
当然,棘手的部分 可能是正确识别依赖项,并在需要时对其进行模拟。
但理想情况下,您的测试应该是:测试被测方法的公共合同。出现问题,然后检查返回的输出是否符合您的期望。理想情况下,您不必为测试进行任何模拟,因为您根本不依赖于测试实现细节。您只需测试公共合同“给出的输入,这就是预期的输出”。
(其中:assertThat()
只是断言的另一种类型,而is()
是hamcrest的匹配器。还有许多其他hamcrest匹配器,例如containsInAnyOrder()
(如果您不关心返回的元素的顺序,那确实很整洁,但是必须了解使用的方式略有不同,这需要使用containsInAnyOrder(expectedOutcomeList.toArray())
方法)