Как использовать впрыск пружины для модульного тестирования контроллера?

Я хочу протестировать свой весенний контроллер mvc.

Контроллер имеет службу:

@Autowired
UserService userService

И моя пользовательская служба зависит от (автоматически подключенного) моего UserDao и некоторых других служб, таких как mongoDb и т. Д.

Теперь я хочу, чтобы бизнес-логика была протестирована в моем UserService, но, конечно же, я хочу имитировать ответы от моих UserDao и Mongodb и т. д.

Как правильно настроить модульный тест?

Могу ли я повторно использовать xml-файл контейнера Spring, содержащий все мои bean-компоненты и т. д., или создать новый one? (я предполагаю, что мне нужно задействовать здесь контейнер spring)

Если вы хотите получить какие-либо рекомендации по этому поводу, любые учебные пособия были бы очень признательны.

Обновление

Что мне показалось странным, так это то, что для моего контроллера Spring (который не реализуется из контроллера) я смог получить доступ к моей частной переменной, чтобы вручную настроить мою службу, например:

@Controller
public class UserController {

   @Autowired
   UserService userService;
}

И в моем модульном тесте Я мог бы сделать:

UserController controller = new UserController();
controller.userService = ....

Но для моей службы UserService, которая имеет автоматическое подключение UserDao, я не могу получить доступ к свойству userDao:

UserService userService = new UserServiceImpl();
userService.userDao = .... // not available

Это имеет смысл, поскольку оно является частным, но как оно работает на моем контроллере?

7
задан Blankman 2 January 2012 в 15:19
поделиться