Поблочное тестирование Сервлет Java

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

53
задан John Yeary 5 January 2013 в 06:08
поделиться

4 ответа

Попробуйте HttpUnit, хотя Вы, вероятно, закончите тем, что писали автоматизированные тесты, которые являются большим количеством 'интеграционных тестов' (модуля), чем 'модульные тесты' (единого класса).

12
ответ дан Peter Hilton 7 November 2019 в 08:45
поделиться

Большую часть времени я тестирую Сервлеты и JSP's через 'Интеграционные тесты', а не чистые Модульные тесты. Существует большое количество дополнений для JUnit/TestNG, доступного включая:

  • HttpUnit (самый старый и самый известный, очень низкий уровень, который может быть хорошим или плохим в зависимости от Ваших потребностей)
  • HtmlUnit (более высокий уровень, чем HttpUnit, который лучше для многих проектов)
  • JWebUnit (находится сверх других инструментов тестирования и пытается упростить их - тот, которого я предпочитаю)
  • WatiJ и Селен (используют Ваш браузер, чтобы сделать тестирование, которое является большим количеством тяжеловеса, но реалистичный)

Это - тест JWebUnit для простого Сервлета Обработки заказов, который обрабатывает вход от формы 'orderEntry.html'. Это ожидает идентификатор клиента, имя клиента и один или несколько объектов порядка:

public class OrdersPageTest {
    private static final String WEBSITE_URL = "http://localhost:8080/demo1";

    @Before
    public void start() {
        webTester = new WebTester();
        webTester.setTestingEngineKey(TestingEngineRegistry.TESTING_ENGINE_HTMLUNIT);
        webTester.getTestContext().setBaseUrl(WEBSITE_URL);
    }
    @Test
    public void sanity() throws Exception {
        webTester.beginAt("/orderEntry.html");
        webTester.assertTitleEquals("Order Entry Form");
    }
    @Test
    public void idIsRequired() throws Exception {
        webTester.beginAt("/orderEntry.html");
        webTester.submit();
        webTester.assertTextPresent("ID Missing!");
    }
    @Test
    public void nameIsRequired() throws Exception {
        webTester.beginAt("/orderEntry.html");
        webTester.setTextField("id","AB12");
        webTester.submit();
        webTester.assertTextPresent("Name Missing!");
    }
    @Test
    public void validOrderSucceeds() throws Exception {
        webTester.beginAt("/orderEntry.html");
        webTester.setTextField("id","AB12");
        webTester.setTextField("name","Joe Bloggs");

        //fill in order line one
        webTester.setTextField("lineOneItemNumber", "AA");
        webTester.setTextField("lineOneQuantity", "12");
        webTester.setTextField("lineOneUnitPrice", "3.4");

        //fill in order line two
        webTester.setTextField("lineTwoItemNumber", "BB");
        webTester.setTextField("lineTwoQuantity", "14");
        webTester.setTextField("lineTwoUnitPrice", "5.6");

        webTester.submit();
        webTester.assertTextPresent("Total: 119.20");
    }
    private WebTester webTester;
}
45
ответ дан Yuri Ghensev 7 November 2019 в 08:45
поделиться

Вы называете doPost и doGet методы вручную в модульных тестах? Раз так можно переопределить методы HttpServletRequest для обеспечения фиктивных объектов.

myServlet.doGet(new HttpServletRequestWrapper() {
     public HttpSession getSession() {
         return mockSession;
     }

     ...
}

HttpServletRequestWrapper является классом Java удобства. Я предлагаю, чтобы Вы создали служебный метод в своих модульных тестах для создания ложных запросов HTTP:

public void testSomething() {
    myServlet.doGet(createMockRequest(), createMockResponse());
}

protected HttpServletRequest createMockRequest() {
   HttpServletRequest request = new HttpServletRequestWrapper() {
        //overrided methods   
   }
}

еще лучше поместить ложные методы создания в основной суперкласс сервлета и сделать все модульные тесты сервлетов для расширения его.

6
ответ дан Marcio Aguiar 7 November 2019 в 08:45
поделиться

Mockrunner ( http://mockrunner.sourceforge.net/index.html ) может сделать это. Это обеспечивает ложный контейнер J2EE, который может использоваться для тестирования Сервлетов. Это может также привыкнуть к модульному тесту другой серверный код как EJBs, JDBC, JMS, Struts. Я только использовал JDBC и возможности EJB сам.

6
ответ дан Kris Pruden 7 November 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: