Мой ответ не полный. Я сосредоточился только на технических требованиях - мои рассуждения основаны только на тестовом коде, который вы вставили. Дополнительные выводы могут (и, вероятно, должны) быть сделаны на основе семантики классов / объектов, описанных там. Давайте отложим это на некоторое время.
Ваше решение не совсем корректно (я полагаю, вы имели в виду Op
в качестве имени интерфейса, которое вы разместили). Имея это определение, тест не будет просто компилироваться. Мы знаем, что для любой реализации Op
(здесь назначенной переменной aValue
) у нее есть (как минимум) два метода:
Последнее является тривиальным, потому что каждый объект в Java имеет этот метод реализован (java.lang.Object
суперкласс всех классов гарантирует, что)
Таким образом, интерфейс Op
должен выглядеть следующим образом:
/*public*/ interface Op {
/*some return type*/ getVal1();
// .. other methods (?)
}
Модификатор видимости Op
здесь не так важен.
Тип возврата метода getVal1()
неочевиден. Вам нужно было бы проверить это, но, вероятно, для того, чтобы эта строка компилировала assertEquals(5, aValue.getVal1());
, это должно быть Integer
, int
или, возможно, несколько меньших числовых типов. Я не уверен, что long
или Long
подойдут здесь.