Внедрить другую реализацию для тестирования - PullRequest
2 голосов
/ 31 января 2012

У меня есть следующие классы:

public interface Emailer {}

@Named    
public class RealEmailer implements Emailer {}

@Named
public class NoOpEmailer implements Emailer {}

И мой класс обслуживания использует реальный адрес электронной почты:

public class SomeService {
    @Inject
    private Emailer emailer;
}

Вопрос в том, в моем классе тестирования обслуживания (SomeServiceTest)как мне ввести Emailer в сервисе для использования NoOpEmailer?Я использую Spring для DI Framework.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

Если вы можете использовать Spring 3.1, вы можете использовать Профили .Это позволит вам предоставить две разные реализации одного и того же компонента (Emailer и NoOpEmailer).Затем в своем тесте вы можете использовать аннотацию @Profile ("test") для активации профиля теста, и ваш боб не будет введен.

1 голос
/ 31 января 2012

Рассматривали ли вы возможность сделать область пакета поля, а не частной, поскольку это значительно упростит настройку этого поля во время модульного теста (при условии, что ваш класс теста находится в том же пакете, что и ваш объект).

Если нет, то, похоже, для этого с Spring вы бы использовали ReflectionTestUtils#setField(Object target, String name, Object value), чтобы ввести это значение в ваш класс

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