java - 编写需要 2 个列表的单元测试
问题描述
我是一个新的 Junit Learner 我想根据 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");
}
谢谢先进
解决方案
实际上,这很简单。
@Test
public void testApplyFilter()
{
assertThat(someObject.applyFilter(journies, filters), is(expectedOutcome));
}
换句话说:你知道这个方法应该做什么。(嗯,这些知识是测试东西的先决条件。当你不知道你的代码在做什么时,通过测试来验证它的正确性是没有意义的......)
如:给定一些已知的输入数据,您应该能够对输出返回的期望值。这就是您要检查的内容。
当然,棘手的部分可能是正确识别依赖关系,并在需要时模拟它们。
但理想情况下,您的测试应该只是:测试您的被测方法的公共合约。有东西进入,您检查返回的输出是否符合您的期望。理想情况下,您不必为此类测试模拟任何内容,因为您根本不依赖测试实现细节。你只测试公共合约“给定这个输入,这是预期的输出”。
( where:assertThat()
只是一种不同类型的断言,并且is()
是一个hamcrest匹配器。还有许多其他 hamcrest 匹配器,例如containsInAnyOrder()
( 如果您不关心返回的元素的顺序,那一个真的很整洁,但必须了解使用方式略有不同,需要containsInAnyOrder(expectedOutcomeList.toArray())
methinks)
推荐阅读
- javascript - 加载产品图片出错时不显示默认图片
- powerbi - DAX 转换为分和秒
- azure - 我是 Azure 中的全局管理员,但我看不到任何计费范围
- python - VS Code(python):如何在不修改代码的情况下使模型导入正常工作(即解决 ModuleNotFoundError)
- c# - 在 WPF 中创建新窗口实例时出现 System.InvalidOperationException
- reactjs - 选项卡的 NextJS 持久嵌套布局
- javascript - 捕获整行语法和字符串输出以进行调试
- sas - SAS:宏未在宏环境中解析
- javascript - 动态选择元素
- omnet++ - 在 Omnet++ 中执行场景时出错