@MaxLich
java developer с небольшим опытом

Как подменить объект заглушкой в spring контексте для тестов?

Здравствуйте. Использую Активити в своём приложении, и решил написать юнит-тесты для тестирования старта процесса, завершения текущего user task, получения списках текущихuser task и т.д. В схеме у меня используются бины спринга:
<serviceTask id="get_timer_value_1" name="get_timer_value_1" activiti:expression="${activitiGetTimerValueDelegateService.getTimerValue(9,1,execution)}"></serviceTask>

В данном случае activitiGetTimerValueDelegateService - это бин.

Мне нужно, что этот вызов
activitiGetTimerValueDelegateService.getTimerValue(9,1,execution)
всегда возвращал одно константное значение (в приложении он берёт значение для таймера из базы).
Отдельный spring контекст для тестов для создал, но запнулся на добавлении в этот контекст мока данного бина. Как проще всего это сделать?

ЗЫ Не хотелось бы для этого менять имя бина или bpm-схему
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Shiftuia
Java-программист
Можно попытаться написать отдельный класс, в котором будет происходить создание вашего объекта
Общий смысл в том, чтобы использовать Primary, которому будет отдаваться предпочтение при создании бина
Что-то типа

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import static org.mockito.Mockito.*;

@Configuration
public class MockConfiguration {


	@Primary
	@Bean
	public ActivitiGetTimerValueDelegateService activitiGetTimerValueDelegateService() {
		ActivitiGetTimerValueDelegateService service = mock(ActivitiGetTimerValueDelegateService.class);
		when(service.getTimerValue(any(), any(), any())).thenReturn(42);

		return service;
	}

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы