Comment faire pour exécuter le serveur jetty pour java junit test
Je suis en train d'écrire un test d'intégration tourner un serveur jetty localement et ensuite utiliser le client pour communiquer avec le reste de l'URI et d'appeler la logique d'entreprise en aval. Cependant, lorsque je démarre mon serveur jetty il ne renonce pas à la contrôler, de sorte que mon client n'est pas exécutée. J'ai donc utilisé le filetage de commencer mon jetée dans un thread différent, cependant, le thread se termine avant mon appel du client, il est dit connexion refusée. Toute approche je peux prendre?
@Test
public void testPerform() {
final JettyServer jettyServer = JettyServer.create();
jettyServer.buildJettyServer(ServletContextHandler.SESSIONS, "/", 8080, TestResource.class);
Runnable runnable = new Runnable()
{
@Override
public void run()
{
jettyServer.start();
}
};
new Thread(runnable).start();
final javax.ws.rs.client.Client client = ClientBuilder.newClient();
final Response response = client.target("http://localhost:8080/test").request().post(Entity.text(""));
jettyServer.stop();
}
Quelle classe est
Je me suis mis en œuvre une classe finale JettyServer qui utilise org.eclipse.la jetée.serveur.Serveur de tourner un serveur jetty.
Bien sûr, mais ne sachant pas ce que cette classe ne rend plus difficile pour nous de vous aider.
Ohh. Je pensais que n'aurait pas d'importance dans ce cas, le serveur fonctionne normalement quand je la faire tourner et frapper depuis le navigateur. Le seul problème était le test junit. Je suis désolé pour ça.
Peut-être, mais nous ne le savions pas.
JettyServer
? il n'existe pas de méthode buildJettyServer
dans le la Jetée de documentationJe me suis mis en œuvre une classe finale JettyServer qui utilise org.eclipse.la jetée.serveur.Serveur de tourner un serveur jetty.
Bien sûr, mais ne sachant pas ce que cette classe ne rend plus difficile pour nous de vous aider.
Ohh. Je pensais que n'aurait pas d'importance dans ce cas, le serveur fonctionne normalement quand je la faire tourner et frapper depuis le navigateur. Le seul problème était le test junit. Je suis désolé pour ça.
Peut-être, mais nous ne le savions pas.
OriginalL'auteur LifeStartsAtHelloWorld | 2015-04-20
Vous devez vous connecter pour publier un commentaire.
Sauter le
Runnable
, sautez lanew Thread(runnable).start()
L'appel
jettyServer.start()
démarre le serveur sur son propre thread (avec tous les autres threads que le serveur a besoin.Pour un exemple de base de junit et jetée ...
La
@Before
et@After
junit, les annotations peuvent également être utilisés. Cela va démarrer le serveur avant chaque@Test
et arrêter le serveur après.Pour la meilleure approche, vous pouvez également utiliser le
@BeforeClass
et@AfterClass
techniques, ainsi que l'auto-exécutoire à un port ouvert. Cela ne démarrer le serveur une fois, par Classe de Test, exécuter tous les@Test
méthodes, puis arrêter le serveur une fois à la fin.Ce n'est pas le seul moyen, est allé de l'avant et a ajouté 2 de plus pour vous.
Merci beaucoup. Je vais essayer ça.
Comment puis-je obtenir le serverUri quand j'ai un serveur déjà en cours d'exécution à l'extérieur de junit?
puisque vous n'avez pas accès à la ServerConnector dans cette configuration, vous pourriez peut-être utiliser JMX pour obtenir le Connecteur de Serveur configurations dont vous avez besoin. (bien sûr, vous aurez besoin de démarrer le Serveur JMX activé, alors)
OriginalL'auteur Joakim Erdfelt