Quiero probar mi controlador mvc de primavera.¿Cómo se usa la inyección de resorte para probar la unidad de un controlador?
El controlador dispone de un servicio:
@Autowired
UserService userService
Y mi servicio de usuario depende de (autowired) mi UserDao y algunos otros servicios como MongoDB etc.
Ahora quiero la lógica de negocio a ensayar en mi UserService, pero por supuesto quiero simular las respuestas de mi UserDao y Mongodb, etc.
¿Cómo configuro mi unidad de prueba correctamente?
¿Puedo volver a utilizar el archivo xml del contenedor de primavera que tiene todos mis frijoles, etc. o puedo crear uno nuevo? (supongo que tengo que obtener el contenedor de primavera involucrado aquí)
Buscando alguna orientación sobre esto, cualquier tutorial sería muy apreciado.
actualización
Lo que me parece extraño es que para mi controlador de muelle (que no implementa a partir del regulador) pude acceder a mi varialbe privada para configurar manualmente mi servicio, es decir:
@Controller
public class UserController {
@Autowired
UserService userService;
}
Y en mi unidad de prueba que podía hacer:
UserController controller = new UserController();
controller.userService = ....
Pero para mi UserService, que tiene UserDao autowired, no puedo acceder la propiedad UserDAO:
UserService userService = new UserServiceImpl();
userService.userDao = .... // not available
Tiene sentido, ya que es privado, pero ¿Cómo es trabajar para el controlador?
Re: actualización, ¿en qué paquetes están el controlador, el servicio y las pruebas? Si la prueba está en el mismo paquete, puede acceder a las propiedades del alcance predeterminado. Omitir un modificador de acceso * * no hace que una propiedad sea privada, más bien [paquete-privado] (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). –
Los tengo en el mismo paquete. Ahh ya veo, supuse que era privado. Me preguntaba por qué IntelliJ durante un refactorizador hace que los campos sean privados por defecto. Entonces, ¿debería mantenerlos como un paquete privado? – Blankman
No hay "debería", solo depende. Mi única preocupación con el paquete privado es que todavía puedes acceder a algo involuntariamente; Tiendo a preferir mantener las cosas en privado y usar setters, pero meh. –