Для каждого элемента, взаимодействие которого вы хотите проверить, вы должны использовать внедрение зависимостей .Это хорошее правило для тестирования.
В качестве альтернативы вы можете подумать, если вы можете протестировать результат из jdbccall.execute(parameters)
, а не только аргументы - это было бы лучшим решением.Каким должно быть состояние системы после того, как execute
вызван с правильными аргументами?
Если вы выполняете модульное тестирование и не можете проверить результат execute
, тогда вам нужно как-то передать объект типаSimpleJDBCall
в конструкторе.Теперь есть три возможности:
Создайте еще один конструктор, который будет принимать DataSource
и SimpleJDBCall
- тогда вы можете сделать что-то вроде:
public DAO1(@Qualifier("datasource") DataSource dataSource) {
this(dataSource, createJdbcCall(someparameters))
}
public DAO1(DataSource dataSource, SimpleJDBCall jdbccall) {
this.jdbccall = jdbccall
}
Измените конструктор и добавьте autowired SimpleJDBCall
в ваш контейнер (но от имени jdbCall я предполагаю, что это не простое решение)
Измените конструктор (или добавьте еще один) с помощью объектакоторый может создать SimpleJDBCall
- это может быть фабрика, это может быть простая функция:
public DAO1(@Qualifier("datasource") DataSource dataSource, Supplier<SimpleJDBCall> jdbcCallCreator) {
jdbccall = jdbcCallCreator.get();
}
или, если это требует аргументов:
public DAO1(@Qualifier("datasource") DataSource dataSource, Function<ArgumentType, SimpleJDBCall> jdbcCallCreator) {
jdbccall = jdbcCallCreator.apply(arguments);
}
Донне боитесь изменить свой класс для целей тестирования - если он не поддается тестированию, может быть, он не был спроектирован в первую очередь?