测试Lombok生成的数据结构

时间:2018-11-18 11:49:49

标签: java tdd lombok junit5

我有以下描述元组的类,为此使用lombok

@Data
public class Pair<K, V> {
    private final K key;
    private V value;
}

然后我想使用JUnit来为此课程编写一个测试,如下所示:

public class PairTest {
    @Test
    void pairCanBeCreatedAndHoldIntegerValues() {
        Pair<Integer,Integer> myTestPair = new Pair<Integer, Integer>(0);
        myTestPair.setValue(5);
        assertEquals(5, myTestPair.getValue());
        assertEquals(0, myTestPair.getKey());
    }
}

尽管lombok自动生成的get方法应该返回一个int,但我仍然看到我的IDE抱怨:

Error:(12, 9) java: reference to assertEquals is ambiguous
  both method assertEquals(java.lang.Object,java.lang.Object) in org.junit.jupiter.api.Assertions and method assertEquals(int,int) in org.junit.jupiter.api.Assertions match

尽管我知道assertEquals期望有两个int,我正在提供。

如何在Java中做到这一点?

1 个答案:

答案 0 :(得分:4)

该行为的原因称为autoboxing\unboxing

  

自动装箱是Java编译器进行的自动转换   在原始类型及其对应的对象包装器之间   类。例如,将int转换为Integer,将double转换为a   双重,依此类推。如果转换结果相反,这是   称为拆箱。

myTestPair对象返回Integer的包装int,因此编译器不知道使用哪种重载方法:assertEquals(Object, Object)assertEquals(int, int)。您需要让编译器知道它,使用:

assertEquals(5, myTestPair.getValue().intValue());
assertEquals(0, myTestPair.getKey().intValue());

assertEquals((Integer)5, myTestPair.getValue());
assertEquals((Integer)0, myTestPair.getKey());

assertEquals(Integer.valueOf(5), myTestPair.getValue());
assertEquals(Integer.valueOf(0), myTestPair.getKey());