gpt4 book ai didi

java - 单元测试 : check if a particular Comparable has been called

转载 作者:行者123 更新时间:2023-11-29 08:37:02 26 4
gpt4 key购买 nike

考虑这个方法,我想为它写一个单元测试。

public void update(List toUpdate) {
//...
Collections.sort(toUpdate, new SpecificComparator());
//...
}

我想确保我们使用 SpecificComparator 实现对给定列表进行排序。无论如何要这样做?

我正在考虑使用工厂来检索 SpecificComparator 实现,这样我就可以通过 Mockito 验证我们正在调用工厂,但这并不能确保我在给定这个比较器的情况下对列表进行排序,我们可以想象有人正在调用方法中的工厂但不使用它对列表进行排序...

或者,我也可以验证 toUpdate 列表对象的顺序,在我的单元测试中用相同的比较器排序另一个列表,并检查它们是否以相同的方式排序?

最佳答案

这么多的答案,都包含一个“真相”但缺少其他人。伤心。

因此:您绝对应该避免使用模拟来测试排序调用的比较器。相反,您确实测试了两个方面:

  1. 您为比较对象编写单元测试。哎呀,比较器只有一种方法;具有非常明确定义的语义。你专注于编写单元测试来单独测试那个东西。因为那是 A) 容易做和 B) 单元测试的整个想法:你尽可能地对最小的单元进行测试。
  2. 您编写了一些单元测试以确保您的“管道”是正确的。而且你不会 mock 那里的任何东西。您确保使用比较器对包含已知内容的列表进行排序;然后你 assertThat(actualList, is(expectedList));

长话短说:比较器本身就是一个单元。你开始测试那个东西;所有的角落案例,什么不是。然后确保应该对列表进行排序的方法返回一个排序列表。

如果您的代码仍然需要考虑模拟,那么您的设计很可能可以改进为易于测试(而不是难以测试)。

关于java - 单元测试 : check if a particular Comparable has been called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43327709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com