Используйте вспомогательный класс внутри тестового класса JUnit / Spring - PullRequest
0 голосов
/ 29 января 2020

Я хотел бы попросить вашего знания. Приложение весенней загрузки содержит различные картографы. Они должны быть проверены. Для проверки картографа необходимо прочитать файл JSON. Этот JSON файл загружается в каждый тестовый файл. Пока что функциональность реализована в каждом тестовом классе, я хотел бы передать функциональность на аутсорсинг функциональности. Я пытаюсь сделать это следующим образом:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {ObjectMapperConfig.class})
public class ResourceHelper {

  /**
   * Bean to de/serialize jsons.
   */
  @Autowired
  private ObjectMapper objectMapper;

  /**
   * Path to the file that will be used as input data.
   */
  @Value("classpath:productInputs/soundRecording.json")
  private Resource productInputInputFile;

  /**
   * Method to read a resource and convert it into a desired object.
   *
   * @param clazz Class of the desired object.
   * @param <T> Type of the desired object.
   * @return The desired object.
   * @throws IOException Thrown if there is a problem accessing the url.
   */
  public <T> T getSoundRecordingResource(final Class<T> clazz) throws IOException {

    final String productClaimString = IOUtils.toString(productInputInputFile.getURL(), AppConstants.ENCODING);

    return objectMapper.readValue(productClaimString, clazz);
  }

}

И в тестовом классе я вызываю помощника следующим образом:

  @Autowired
  private ResourceHelper resourceHelper;
  ....
  final ProductClaim productClaim = resourceHelper.getSoundRecordingResource(ProductClaim.class);

К сожалению, я получаю следующее сообщение об ошибке:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'a.package.path.CreditMapperTest': неудовлетворенная зависимость, выраженная через поле 'resourceHelper'; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'a.package.path.ResourceHelper': ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)}

Какой опыт вы получили в этой области? Я вообще не прав?

Ответы [ 2 ]

0 голосов
/ 29 января 2020

После нескольких попыток я нашел рабочее, если не идеальное, решение. Я заменил аннотацию ResourceHelper на "@Component". Я делаю настройку контекста ResourceHelper, а также ObjectMapper в каждом тестовом классе, который хочет использовать ResourceHelper. На мой взгляд, это не очень хорошее решение, но, по крайней мере, я могу избежать дублирования кода. Если в будущем у кого-то возникнет похожая проблема, и он найдет лучшее решение, он может опубликовать ее в этом сообщении.

0 голосов
/ 29 января 2020

Попробуйте добавить аннотацию @Service на ResourceHelper. Это только мое предположение.

...