Вот довольно стандартный подход, который я использую для выполнения тестов JUnit в среде Java EE.
Основная идея:
- Написать простое тестовое приложение с тестом Servlet и независимо от объекта EJB вы хотите проверить
- Используйте тестовый набор JavaSE JUnit для запуска сервера приложений, и диска GET запросы к испытательному сервлета
- Положите вашу фактическую тестовую логику в тестовом сервлета, таким образом, тестовая логика будет выполняющийся в среде Java EE
Вот иллюстрация ш шляпа, которая может выглядеть следующим образом:
Используйте набор JUnit SE с основными тестовых шлейфов для управления GET запросы к Вашему приложению:
@BeforeClass
public static void oneTimeSetUp() {
// start my app server and make sure apps are installed
}
@AfterClass
public static void oneTimeTearDown() {
// shut down app server
}
@Test
public void testApplicationAvailable() {
runTestInServlet("testApplicationAvailable");
}
@Test
public void testThatFails() {
runTestInServlet("testThatFails");
}
private void runTestInServlet(String testName) {
// Construct the URL, note that the name of the test is passed in
// as the value of the "test" parameter. This will get read from
// the servlet's doGet method
URL url = new URL("http://localhost:9080/myAppName/testServletName?test=" + test);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
try{
con.setRequestMethod("GET");
InputStream is = con.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// use the BufferedReader to validate response from test servlet
// i.e. search for some "successful test" token
} finally {
con.disconnect();
}
}
Использование соответствующих методов в тестовом сервлета, чтобы выполнить реальное испытание в среда Java EE:
@WebServlet(name = "TestServlet", urlPatterns = { "/testServletName" })
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String test = request.getParameter("test");
PrintWriter out = response.getWriter();
try {
System.out.println("-----> " + test + " starting");
// Use reflection to branch out and invoke the method found in the GET method's "test" parameter
getClass().getMethod(test, PrintWriter.class).invoke(this, response.getWriter());
System.out.println("<----- " + test + " successful");
} catch (Throwable x) {
System.out.println("<----- " + test + " failed:");
} finally {
out.flush();
out.close();
}
}
public void testApplicationAvailable(PrintWriter pw) throws Exception {
System.out.prinln("Application and test servlet available");
}
public void testThatFails(PrintWriter pw) throws Exception {
throw new Exception("This test will fail");
}
}
есть ЛИЭС сторонних вы можете использовать, чтобы сделать это немного более простым, но это основная идея. Примеры, которые я показал здесь, могут быть выполнены со стандартными Java-библиотеками (и, конечно же, средой Java EE). Единственное, что здесь характерно для сервера приложений, на котором вы работаете, это логика запуска и останова сервера.
Кроме того, я слышал хорошие вещи о Аркиллиан, но в последнее время я слышал, что он поддерживается только для нескольких серверов приложений Java EE, что нарушит ваши требования к переносимости.
Вы считаете [Arquillian] (http://arquillian.org/)? –