有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java编写Unittest,其中包含2个列表

我是一个新的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) 个答案

  1. # 1 楼答案

    事实上,这很简单

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

    换句话说:你知道这个方法应该做什么。(好吧,这些知识是测试东西的先决条件。当你不知道你的代码在做什么时,没有必要通过测试来验证它的正确性。)

    比如:给定一些已知的输入数据,你应该能够对输出返回做出预期。这就是你要检查的

    当然,棘手的部分可能是正确识别依赖项,并在需要的地方模拟它们

    但理想情况下,你的测试应该是这样的:测试被测试方法的公共契约。有东西进来了,你检查返回的输出是否符合你的期望。理想情况下,您必须为此类测试模拟任何,因为您根本不依赖测试实现细节。您只测试公共契约“给定此输入,这是预期输出”

    (其中:assertThat()只是一种不同类型的断言,而is()是一种hamcrest匹配器。还有许多其他的hamcrest匹配器,比如containsInAnyOrder()(如果你不关心返回元素的顺序,那么它真的很整洁,但是你必须理解,它的使用略有不同,它需要containsInAnyOrder(expectedOutcomeList.toArray())方法链接)