Как лучше всего внедрить фиктивные зависимости Spring @Autowired из модульного теста?

import org.springframework.beans.factory.annotation.Autowired;

class MyService {
  @Autowired private DependencyOne dependencyOne;
  @Autowired private DependencyTwo dependencyTwo;

  public void doSomething(){
    //Does something with dependencies
  }
}

При тестировании этого класса у меня в основном есть четыре способа ввести фиктивные зависимости:

  1. Использовать Spring ReflectionTestUtils в тесте для внедрения зависимостей
  2. Добавить конструктор в MyService
  3. Добавить методы установки to MyService
  4. Ослабьте видимость зависимостей до package-protected и установите поля напрямую

Что лучше и почему?

--- ОБНОВЛЕНИЕ ---

Думаю, мне следовало быть немного яснее - Я говорю только о "модульных" тестах стиля, а не о "интеграционных" тестах Spring, в которых зависимости могут быть связаны с использованием контекста Spring.

16
задан Daniel Alexiuc 28 July 2011 в 00:42
поделиться