2009-11-16 5 views
2

Je suis un testeur unitaire avec jetty et je souhaite non seulement servir ma servlet testée, mais aussi une page statique. La page statique est nécessaire pour mon application. Je suis jetée comme cette initialisationJetée intégrée ServletTester servant un fichier statique unique

tester = new ServletTester(); 
tester.setContextPath("/context"); 
tester.addServlet(MyServlet.class, "/servlet/*"); 
tester.start(); 

Ce que je dois maintenant, est quelque chose comme

tester.addStaticPage("local/path/in/my/workspace", "/as/remote/file"); 

Est-ce possible avec une jetée?

Répondre

3

Je ne pense pas que vous pouvez le faire avec ServletTester. ServletTester crée un contexte unique pour le servlet. Vous devez configurer la jetée intégrée avec au moins deux contextes: un pour le servlet et un pour le contenu statique.

S'il existait un WebAppContext complet, vous seriez défini, mais il n'y en a pas.

Vous pouvez faire une copie de ServletTester et ajouter des cheveux, ou vous pouvez simplement lire sur l'API et configurer les contextes nécessaires. Voici un fragment de code pour vous montrer l'idée de base, vous ne pourrez pas compiler ceci tel quel. Vous devrez créer un contexte approprié pour le contenu statique.

 server = new Server(); 

     int port = Integer.parseInt(portNumber); 
     if (connector == null) { 
      connector = createConnector(port); 
     } 
     server.addConnector(connector); 

     for (Webapp webapp : webapps) { 
      File sourceDirFile = new File(webapp.getWebappSourceDirectory()); 
      WebAppContext wac = new WebAppContext(sourceDirFile.getCanonicalPath(), webapp.getContextPath()); 
      WebAppClassLoader loader = new WebAppClassLoader(wac); 
      if (webapp.getLibDirectory() != null) { 
       Resource r = Resource.newResource(webapp.getLibDirectory()); 
       loader.addJars(r); 
      } 
      if (webapp.getClasspathEntries() != null) { 
       for (String dir : webapp.getClasspathEntries()) { 
        loader.addClassPath(dir); 
       } 
      } 
      wac.setClassLoader(loader); 
      server.addHandler(wac); 
     } 
     server.start(); 
+0

Merci pour votre réponse. Je pensais que ServletTester ne me donnerait pas autant de choix. Je ne sais pas si je veux installer un serveur jetée complet pour mon test unitaire, mais je vais y jeter un coup d'œil. – cringe

0

Définir la base de ressources dans le répertoire contenant votre contenu statique et ajoutez la jetée « servlet par défaut » pour servir ce contenu. J'ai ajouté le code approprié à votre exemple ci-dessous.

tester = new ServletTester(); 
tester.setContextPath("/context"); 
tester.setResourceBase("/path/to/your/content"); 
tester.addServlet(MyServlet.class, "/servlet/*"); 
tester.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class, "/*"); 
tester.start();