Преобразование из суперкласса в подкласс не выполнено в модульном тесте (mockito) - PullRequest
0 голосов
/ 27 марта 2020

Я думал, что знаю основную c идею upcast & downcast, но эта проблема, с которой я столкнулся, заставляет меня думать снова.

В настоящее время он скомпилирован и работает без нареканий. Но когда я пытаюсь выполнить модульный тест (используя mockito), он постоянно указывает на то, что у моего способа кастинга есть проблемы.

Я проверил каждое возможное решение, которое я могу придумать, но ни одно из них не удовлетворяет этой платформе mockito.

Чтобы было ясно, я сделал упрощенную версию для своего Суперкласс и Подкласс, как показано ниже:

@Entity
public class Parent{
  private String A;
  private String B;

  protected Parent(){
  }
// below are necessary getter setter n mapped column
...
}
--------------------------------
@Entity
public class Child extends Parent{
  private String C;
  private String D;

  protected Child(){
     super();
  }
// below are necessary getter setter n mapped column
...
}
---------------------------------

Итак, выше приведены два класса, которые я буду использовать для понижения рейтинга, и класс, который будет выполнять такие действия, как показано ниже:

public class People{
   public void CheckRelation(){
      Parent parent = new Child();
      parent = parentRepo(...); // to get some data
      Child child = (Child) parent;
   }
}

Из того, что я знаете, это правильный способ сделать даункастинг, но у меня есть проблема с Parent parent = new Child();, которая выдает ошибку The constructor Child() is not visible от mockito

, поскольку я не могу внести какие-либо изменения в class Parent, поэтому я пошел, чтобы изменить конструктор class Child() с защищенного на публичный c (что я не знаю, мудрый шаг и не будет сделано).

Это позже приведет к ошибке:

java .lang.ClassCastException: Родитель не может быть приведен к дочернему типу.

Класс Child был создан для добавления дополнительных функций для Parent, так как он больше не может быть изменен. Таким образом, Child использовался в качестве среды для обработки определенного количества данных, и поэтому необходимо уменьшить Parent до child.

Несмотря на то, что компиляция работала нормально, я считаю, что эта ошибка mockito из-за к java времени выполнения это? Или это из-за чего-то еще?

Ценю любой мудрый ответ от всех и благодарю

...