внедрить макеты в bean-компонент с аннотациями @Autowired - PullRequest
1 голос
/ 07 мая 2010

У меня есть bean-компонент, в который добавлено несколько bean-компонентов с аннотацией autowire (без квалификатора). Теперь, по причинам тестирования, я хочу внедрить некоторые бины в bean-компонент вместо тех, которые подключаются автоматически (некоторые DAO). Есть ли способ, которым я могу изменить, какой бин вводится без изменения моего бина? Мне не нравится идея добавлять аннотации к моему коду только для того, чтобы протестировать его и затем удалить для производства. Я использую пружину 2.5.

Боб выглядит так:

@Transactional  
@Service("validaBusinesService")  
public class ValidaBusinesServiceImpl implements ValidaBusinesService {

    @Autowired  
    OperationDAO operationDAO;  
    @Autowired  
    BinDAO binDAO;  
    @Autowired  
    CardDAO cardDAO;  
    @Autowired  
    UserDAO userDAO;  

    ...
    ...
}

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Используйте ReflectionTestUtils, чтобы вручную установить другую реализацию в своих модульных тестах.

Это на самом деле одна из возможностей внедрения зависимости - это не имеет значения для класса как вводятся его зависимости.

0 голосов
/ 11 мая 2010

ИМХО, вы должны предоставить установщики для ввода зависимостей тоже вручную. Тогда это не легкая задача в случае модульного теста. Возможно, уменьшите видимость класса по умолчанию, если вы не хотите, чтобы сеттеры вызывались извне пакета.

Если вы хотите использовать mock в интеграционном тестовом сценарии, вы можете создать фиктивные bean-компоненты следующим образом:

<bean class="….Mockito" factory-method="mock">
  <constructor-arg value="….OperationDao" />
</bean>

Это установит макет Mockito для OperationDao как Spring bean.

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