powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста как протестировать сервлет
24 сообщений из 24, страница 1 из 1
Подскажите пожалуйста как протестировать сервлет
    #39943640
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть сервлет
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class AddAccount extends HttpServlet {
	private static final Logger LOGGER = Logger.getLogger(AddAccount.class);
	private static final long serialVersionUID = 1L;
	private FactoryDAO factoryDAO = FactoryDAO.getInstance();

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String account = request.getParameter("account");
		String type = request.getParameter("select") + " ";
		String exp = request.getParameter("exp") + " ";
		String last = request.getParameter("last");

		String currEmail = request.getUserPrincipal().getName();
		try {
			factoryDAO.getAccountDao().addAccount(currEmail, account, type + exp + last);
			LOGGER.warn("Card " + account + " was adding successfully to " + currEmail);
		} catch (SQLException e) {
			response.getWriter().println(e);
			LOGGER.error("Card adding failed. ", e);
		}
		response.sendRedirect("../");
	}

}



я пытаюсь написать к нему тест
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public class AddAccountTest  extends Mockito{

	
	@Test
	public void test() throws IOException, ServletException, SQLException {
		HttpServletRequest request = mock(HttpServletRequest.class);       
        HttpServletResponse response = mock(HttpServletResponse.class);    
        FactoryDAO factoryDAO = mock(FactoryDAO.class);
        Principal principal = mock(Principal.class);
        
        String currEmail="currEmail";
        String account="account";
        String type="type";
        String exp="exp";
        String last="last";
        
        when (request.getParameter("account")).thenReturn("account");
        when (request.getParameter("select")).thenReturn("select");
        when (request.getParameter("exp")).thenReturn("exp");
        when (request.getParameter("last")).thenReturn("last");
        when(request.getUserPrincipal()).thenReturn(principal);

        StringWriter stringWriter = new StringWriter();
        PrintWriter writer = new PrintWriter(stringWriter);
        when(response.getWriter()).thenReturn(writer);

  //      when(factoryDAO.getAccountDao().addAccount(currEmail, account, type + exp + last)).thenReturn(true);
        
        new  AddAccount().doPost(request, response);

        verify(request, atLeast(1)).getParameter("account"); 
        
        assertTrue(stringWriter.toString().contains("true"));
	}

}



проблема в закомментированной строке. Он лезет в датабазу и там разумеется валится, потому что работает она через коннекшенпул томката. Но как его отучить у меня ума не хватает понять.
да и любые поправки будут полезными
это мой первый сервлет-тест и я понятия не имею как он на самом деле должен правильно выглядеть.
Задача стоит покрыть сервлет тестом. Что именно тестировать - на мое усмотрение.

Заранее спасибо за любую помощь.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943662
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простестируй один DAO и все. Вот эту строку.

Код: java
1.
factoryDAO.getAccountDao().addAccount(currEmail, account, type + exp + last);
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943664
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не понимаю.
мне сервлет надо тестировать.
зачем одну строку и как?

там метод который не надо тестить, я его отдельно уже тестила.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943666
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно тестируют то что содержит "бизнес-логику". У тебя - просто обёртка. И накладные
расходы на ее тестинг особенно с Мокито перекрывают возможную пользу. Нудно. Многословно.
И в тесте еще кучу ошибок наделаешь.

Кто вообще тебе задачи ставит? Тестовое задание дали?
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943670
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня вебприложение. типа курсового итогового задания.
задача покрыть его тестами. хотябы на 30%
те методы что в датабазу лазят я через моки также "нудно-многословно" закрыла. Но этого не хватило.
надо на чем-то добрать остальчные % а там кроме сервлетов больше нет ничего) вот и мучаюсь
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943674
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samantata, ну вот ты сделала мок

Код: java
1.
FactoryDAO factoryDAO = mock(FactoryDAO.class);


Это пустышка которая ничего не делает. Дальше надо ее наполнить правилами "when"
точно так-же как и ты сделала для request.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943677
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я пытаюсь)

when(factoryDAO.getAccountDao().addAccount(currEmail, account, type + exp + last)).thenReturn(true);

только оно вызывая getAccountDao().
получает оттуда new AccountDao(). тут же вызывает метод и успешно на нем умирает.

надо чтоб оно еще на этапе getAccountDao() больше уже никуда не ходило. Как это сделать?
если замокать factoryDAO.getAccountDao().
то будет нульпоинтэксепшн. ибо оно всеравно на нем метод попытается вызвать
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943688
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samantata,
Надо снаружи тестировать.
Создать клиент http и вызвать POST с разными параметрами.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943689
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samantata

только оно вызывая getAccountDao().
получает оттуда new AccountDao(). тут же вызывает метод и успешно на нем умирает.

Как оно умирает? Приходит врач и меряет пульс? И пишет заключение?

В инфо-технологиях эту красивую метафору обычно описывают как код ошибки или состояние стектрейса
где описана настоящая причина.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943690
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Samantata

только оно вызывая getAccountDao().
получает оттуда new AccountDao(). тут же вызывает метод и успешно на нем умирает.

Как оно умирает? Приходит врач и меряет пульс? И пишет заключение?

В инфо-технологиях эту красивую метафору обычно описывают как код ошибки или состояние стектрейса
где описана настоящая причина.

Да очевидно же что accountDAo в этом случае не замоканный и реальный и лезет в БД, там изза отсутствия коннекшена валится.
Чем не подходит вариант создания фейкового дао?
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943693
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

авторДа очевидно же что accountDAo в этом случае не замоканный и реальный и лезет в БД, там изза отсутствия коннекшена валится.
Чем не подходит вариант создания фейкового дао?
не могли бы вы его написать. я попробую может и подходит

у меня же есть
FactoryDAO factoryDAO = mock(FactoryDAO.class);
но что с ним дальше делать я не знаю.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943695
Samantata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Samantata,
Надо снаружи тестировать.
Создать клиент http и вызвать POST с разными параметрами.

а можно пример кода, пожалуйста. это может быть то что мне нужно.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943786
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samantata
PetroNotC Sharp
Samantata,
Надо снаружи тестировать.
Создать клиент http и вызвать POST с разными параметрами.

а можно пример кода, пожалуйста. это может быть то что мне нужно.

OkHttpClient client = new OkHttpClient();
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943797
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Samantata,


Так не сработает:
Код: java
1.
 when(factoryDAO.getAccountDao().addAccount(currEmail, account, type + exp + last)).thenReturn(true);



Вот так как-то:
Код: java
1.
2.
3.
4.
 FactoryDao dao = mock(FactoryDao.class);
AccountDao accDao = mock(AccountDao.class)
when(dao.getAccountDao()).thenReturn(accDao);
when(accDao.addAccount(...).thenReturn(true)
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943798
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще лучше использовать https://www.javadoc.io/doc/org.mockito/mockito-core/2.2.28/org/mockito/junit/MockitoJUnitRunner.html (версию последнюю возьмите, конечно :)
Где это возможно. Меньше кода. Но не забывайте делать Mockito.reset(..) для каждого мока в методе помеченным @Before
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943799
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
... 
@Mock
private SomeClass someObj;

@Mock
private AnotherClass anotherObj;

public void before(){
Mockito.reset(someObj, anotherObj);
}
...
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943978
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79,

22110929
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943985
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
PetroNotC Sharp
Zzz79,

22110929

она шо хочет то дао слой оттестить? если дао то это эмбдед бд с тест профилем-дел на 5 минут - потом хоть обтестируйся+ масштабируемость

10 раз повторяла мантру.
Хочет обложить СЕРВЛЕТ.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943986
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79,

Я вспомнил. Тебе сервлеты писать не приходилось)
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943988
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Хочет обложить СЕРВЛЕТ.
Матом?
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39943993
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79,
У тебя было spring MVC
Это не сервлеты с
request.getParameter(
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39944346
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79,
Зачем сто раз говорить.
Даешь ссылку на request.getParameter(
в своей теме.
Как раз увидишь, что искать что либо в бардачной теме 30 страниц то еще удовольствие.
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39944664
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
PetroNotC Sharp
Zzz79,
Зачем сто раз говорить.
Даешь ссылку на request.getParameter(
в своей теме.
Как раз увидишь, что искать что либо в бардачной теме 30 страниц то еще удовольствие.

научись пользоваться поиском ,без труда найдешь ссылку на первый проект
а в твоих темах есть после ссылок на номера страниц, ссылка "все"?
...
Рейтинг: 0 / 0
Подскажите пожалуйста как протестировать сервлет
    #39945032
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zzz79
PetroNotC Sharp,давай я те дам ссылку на свой первый сервлет проект))

тут принято рыбу не давать. Давать удочку.
Зачем плохому учишь?))
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста как протестировать сервлет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]