Тест Lombok-сгенерированной структуры данных - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть следующий класс, описывающий кортеж, для этого используется 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());
    }
}

Однако, несмотря на то, что метод get, сгенерированный автоматически lombok, должен возвращать 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 голосов
/ 18 ноября 2018

Причина такого поведения называется autoboxing \ unboxing .

Autoboxing - это автоматическое преобразование, которое делает компилятор Java между примитивными типами и соответствующими им объектными обертками классы. Например, преобразование целого числа в целое, двойное в Двойной и тд. Если преобразование идет другим путем, это называется распаковка.

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...