Пересмотренный объект возвращает ноль - PullRequest
1 голос
/ 10 октября 2019

Я издеваюсь над объектом, подобным этому:

    @InjectMocks
    private AuroraRepoImpl auroraRepo;

    @Mock
    private Connector4AuroraDB connector4AuroraDB;

AuroraRepoImpl - это класс, а connector4AuroraDB - это объект, который мне нужно смоделировать. Но когда вызов переходит на connector4AuroraDB, вместо смоделированного он возвращает null.

. Вот как он используется:

Connection connection = connector4AuroraDB.openConnection();

Он выбрасывает NullPointerException,Любая идея, как издеваться над этим?

1 Ответ

1 голос
/ 10 октября 2019

Из комментариев вы говорите, что Connector4AuroraDB автоматически подключен к Spring (@Autowired). Мне кажется, что вы используете инъекции полей, что затрудняет создание зависимостей заглушки.

Я предполагаю, что у вас есть что-то вроде:

public class AuroraRepoImpl {
  @Autowired private Connector4AuroraDB connector4AuroraDB;
}

Чтобы это работало, вам нужен Springнастройка контекста, поэтому Spring может заглянуть в реестр бинов, чтобы найти зависимость.

Ваш пример - простой модульный тест, работающий с MockitoJUnitRunner. Вы должны изменить свою реализацию, чтобы использовать инжекцию через конструктор, таким образом, Mockito может внедрить зависимость:

public class AuroraRepoImpl {
  private final Connector4AuroraDB connector;

  @Autowired
  public AuroraRepoImpl(final Connector4AuroraDB connector) {
    this.connector = connector;
  }
}

Если вы используете новую версию Spring, вы можете даже опустить аннотацию @Autowired, если класс имеет только однуконструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...