Java junit中的反向关系测试

Java junit中的反向关系测试,java,junit,Java,Junit,我有以下方法返回列表中出现最多的值 public Integer notaFrecventaMaxima() { if (note.size() == 0) { return null; } else { Map<Integer, Integer> frecventaNote = new HashMap(); for (Integer nota : this.note) { Integer fre

我有以下方法返回列表中出现最多的值

public Integer notaFrecventaMaxima() {
    if (note.size() == 0) {
        return null;
    } else {
        Map<Integer, Integer> frecventaNote = new HashMap();
        for (Integer nota : this.note) {
            Integer frecventaNota = frecventaNote.get(nota);
            frecventaNote.put(nota, frecventaNota == null ? 1 : frecventaNota+1);
        }

        Entry<Integer, Integer> max = null;
        for (Entry<Integer, Integer> entry : frecventaNote.entrySet()) {
            if (max == null || entry.getValue() > max.getValue()) {
                max = entry;
            }
        }

        Integer maxValue = max.getValue();

        int returnNota = frecventaNote.entrySet().stream().filter(entry -> entry.getValue() == maxValue)
                .map(entry -> entry.getKey()).max(Comparator.naturalOrder()).get();

        return returnNota;
    }
}
public Integer notafrecventaxima(){
如果(注意.size()==0){
返回null;
}否则{
Map frecventaNote=newhashmap();
对于(整数nota:本注释){
整数frecventaNota=frecventaNote.get(nota);
put(nota,frecventaNota==null?1:frecventaNota+1);
}
输入最大值=空;
for(条目:frecventaNote.entrySet()){
如果(max==null | | entry.getValue()>max.getValue()){
最大值=输入;
}
}
整数maxValue=max.getValue();
int returnNota=frecventaNote.entrySet().stream().filter(entry->entry.getValue()==maxValue)
.map(entry->entry.getKey()).max(Comparator.naturalOrder()).get();
返回NOTA;
}
}

我需要为这个方法做一个反向关系junit测试,但我不知道怎么可能。你能告诉我一些想法吗?

这个方法中的所有计算(最终)都是基于什么

for (Integer nota : this.note) {
作为“输入数据”提供

换句话说:您的测试类似乎包含一个数组/列表/。。。使用整数对象。该数据用于创建哈希映射并进行计算;这将导致(最终)为单个整数值

因此,测试实际上非常简单:您为被测试的类创建不同的对象,将“不同”值推入
注释

然后你称之为方法;并且取决于每个输入集的预期结果;您只需断言返回给您的值是预期值:

@Test
public void testCasaUno() {
  Whatever underTest = new Whatever(Arrays.asList(1, 2, 3, 4));
  assertThat(underTest.notaFrecventaMaxima(), is(42));
}

当然:编写这样的测试可能会很棘手,因为您已经在头脑中手动“计算”了某个输入的预期结果。这是一个很大的工作

我宁愿建议您通过将生产代码分解成更多的方法来提高其质量。示例:您可以将该地图的创建+设置移动到其自己的方法中。现在。。。您可以自己测试该方法,这要容易得多:这里是列表,只需检查传出的映射是否与您期望的一样

等等。。。通常情况下:生产代码越遵循“干净代码”规则;测试就越容易