Spring Framework TEST Service Web RESTful (contrôleur) hors ligne, c'est-à-dire aucun serveur, aucune base de données
J'ai une question très simple Reposant Contrôleur qui consomme et produit JSON. J'ai besoin de tester le contrôleur en mode hors connexion c'est à dire pas de serveur, pas de base de données en cours d'exécution. Et je vais écrous pour ne pas être en mesure de trouver une solution. Mon intial cas de test comprennent:
- Test RESTE Uri c'est à dire GET, POST, PUT, DELETE - je dois être en mesure de faire Valoir les données retournées contre les données envoyées.
- Affirmer permettra de tester les données JSON
J'ai le texte suivant Uri:
- /pcusers - Renvoie tous les utilisateurs
- /pcusers/{id} - Retour d'un utilisateur spécifique
- /pcusers/créer/{pcuser} - Ajouter un utilisateur pour la base de données
- /pcusers/mise à jour/{pcuser} - mise à Jour de l'utilisateur
- /pcusers/supprimer/{id} - Supprimer l'Utilisateur
REMARQUE: Ce n'est PAS une application MVC. Je N'ai PAS Vues. J'ai un pur REPOS contrôleur qui crache JSON et utilise des données au format JSON.
Si quelqu'un pouvait me guider dans la bonne direction serait vraiment apprécié.
Juste pour être clair comment mon code ressemble à ceci:
@Controller
@RequestMapping("/pcusers")
public class PcUserController {
protected static Logger logger = Logger.getLogger(PcUserController.class);
@Resource(name = "pcUserService")
private PcUserService pcUserService;
@RequestMapping(value = "", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public List<PcUser> readAll() {
logger.debug("Delegating to service to return all PcUsers");
return pcUserService.readAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET, consumes = "application/json", produces = "application/json")
@ResponseBody
public PcUser read(@PathVariable String id) {
logger.debug("Delegating to service to return PcUser " + id);
return pcUserService.read(id);
}
@RequestMapping(value = "/create/{pcUser}", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
@ResponseBody
public boolean create(@PathVariable PcUser pcUser) {
logger.debug("Delegating to service to create new PcUser");
return pcUserService.create(pcUser);
}
@RequestMapping(value = "/update/{pcUser}", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
@ResponseBody
public boolean update(@PathVariable PcUser pcUser) {
logger.debug("Delegating to service to update existing PcUser");
return pcUserService.update(pcUser);
}
@RequestMapping(value = "/delete/{id}", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
@ResponseBody
public boolean delete(@PathVariable String id) {
logger.debug("Delegating to service to delete existing PcUser");
return pcUserService.delete(id);
}
}
Mise à JOUR (2/5/2012):
Après quelques recherches, je suis tombé sur un framework Spring appelé printemps-test-mvc. Il a l'air très prometteur et j'ai réussi à prendre un bon départ sur ce. Mais maintenant j'ai un nouveau problème. Quand je soumettre une demande GET "/pcusers/{id}", le contrôle est passé à lire méthode qui est responsable pour le traitement de cette cartographie. À l'intérieur de cette méthode, j'ai un pcUserService qui n'a lu. Maintenant, le problème est que lorsque j'exécute ce test, le pcUserService exemple à l'intérieur d'réel contrôleur est NULLE; et par conséquent, il finit par s'écraser en lecture ne peut pas être appelée sur un objet NULL.
Voici PcUserControllerTest code:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/applicationContextTest.xml")
public class PcUserControllerTest {
@Autowired
PcUserService pcUserService;
@Autowired
PcUserController pcUserController;
PcUser pcUser;
@Before
public void setUp() throws Exception {
pcUser = new PcUser("John", "Li", "Weasley", "john", "john", new DateTime());
pcUserService.create(pcUser);
}
public void tearDown() throws Exception {
pcUserService.delete(pcUser.getId());
}
@Test
public void shouldGetPcUser() throws Exception {
standaloneSetup(pcUserController)
.build()
.perform(get("/pcusers/" + pcUser.getId()).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
}
source d'informationauteur jsf
Vous devez vous connecter pour publier un commentaire.
Voici une suggestion qui devrait vous donner quelques idées. Je suppose que vous êtes familiarisé avec les
SpringJUnit4ClassRunner
et la@ContextConfiguration
. Commencez par créer un test de contexte de l'application qui contientPcUserController
et se moquaient dePcUserService
. Dans l'exemplePcUserControllerTest
de classe ci-dessous, Jackson est utilisé pour convertir des messages JSON et Mockito est utilisé pour les moqueries.Maintenant, nous avons tout le code nécessaire pour créer les tests: