Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3365
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно
31 июл 20, 12:34    [22176078]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
PetroNotC Sharp
Zzz79,
Короче, я бы просто в имя метода добавил работу с бд.
Так как это важно почти всегда. Типо:
Импорт.выполнить()
или
Импорт.модифицироватьХMLизБД()
Как то так.
Внутри работа с бд отдельным классом.

у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
31 июл 20, 12:35    [22176081]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
забыл ник
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно

что именно?
31 июл 20, 12:38    [22176087]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,

>у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
Сделать работающий пример как на хабре.
Особенно если в первый раз.
31 июл 20, 12:41    [22176091]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
PetroNotC Sharp
Zzz79,

>у меня все так и есть,я не пойму с какого перепуга не работает правильно мок
Сделать работающий пример как на хабре.
Особенно если в первый раз.

мок работает ,если закоментить строчку в тестируемом классе ,где происходит манипуляция с данными
31 июл 20, 12:44    [22176095]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1483
PetroNotC Sharp
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.

Я пропустил тред, где Стас утверждал, что солид не нужен или это кто-то другой был?
31 июл 20, 12:44    [22176096]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
crutchmaster
PetroNotC Sharp
И метод writeString делает все подряд. И запрашивает бд, и... Косит и жнет.

Я пропустил тред, где Стас утверждал, что солид не нужен или это кто-то другой был?


давай щас это опустим- мне нужно понять почему метод который замокан-не отдает то что прописано в thenReturn
а начинает выполнять флоу реального проекта
31 июл 20, 12:48    [22176098]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
crutchmaster,
Я докопался чисто до названий методов. Невозможно тестировать метод, не понимая что он делает по БЛ.
31 июл 20, 12:52    [22176107]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,
> мок работает ,если закоментить строчку в тестируемом классе ,где происходит манипуляция с данными
Я и предлагаю, упростить код и вопрос. Выкинуть лишнее. Написать ТЕБЕ демку.
31 июл 20, 12:53    [22176109]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3365
Zzz79
забыл ник
private IDataItemModel createItem(Template item) {
		CommonImporter commonImporter=new CommonImporter();


Ясно-понятно

что именно?

Каким образом ты думаешь твой мок подхватится?
31 июл 20, 12:54    [22176110]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
забыл ник
Zzz79
пропущено...

что именно?

Каким образом ты думаешь твой мок подхватится?

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?
31 июл 20, 13:00    [22176116]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
забыл ник
Member

Откуда:
Сообщений: 3365
Zzz79
забыл ник
пропущено...

Каким образом ты думаешь твой мок подхватится?

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?

Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?
31 июл 20, 13:03    [22176120]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1483
Zzz79
а начинает выполнять флоу реального проекта

Открой сорцы этого мокера, да посмотри, что он делает. Делов-то. Картинка с другого сайта.
Чего вообще ты ожидал? Хотел прихерачить либу с рефлексивой чёрной магией и надеелся что всё легко и просто будет работать как тебе надо? Тут так не бывает. А вот просрать две недели в поисках проблемы - очень даже, особенно, если ничего не знаешь.

Сообщение было отредактировано: 31 июл 20, 13:06
31 июл 20, 13:09    [22176125]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
забыл ник
Zzz79
пропущено...

пойдет по тестируемому методу
увидит вывов commonImport.writeString(xml)

увидит что в тесте написано
CommonImporter commonImporter=mock(CommonImporter.class);
when(commonImporter.writeString(anyString())).thenReturn("year")

и вернет заглушку

разве не так?

Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?

кажется я понял на что ты намекаешь)
я вызывают код в тесте вот так
List<IDataItemModel> items = new Importer(dic).load(bytes);

соответсеноо у меня мокнут dic

надо добавтить в конструктор класса Importer класс commonImporter и в тесте закинуть туда мок)

щас опробуем)
31 июл 20, 13:22    [22176134]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
Вот я тупой то)) блин
31 июл 20, 13:30    [22176138]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
забыл ник


Еще раз. Какой инстанс ты мокаешь, и на каком вызывается реальный код?

Спасиб реально помог)
заработало)
у меня еще один вопрос есть тоже по юнит тесту

	byte[] toBytes(List<TemplateGroup> list) throws JsonProcessingException {
		ObjectMapper mapper = new ObjectMapper();
		mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
		return mapper.writeValueAsBytes(list);
	}


мне нужно протестировать вот этот метод

тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
тут есть первая проблема- насколько я знаю байт массивы сравнить нельзя ни по ссылке ни по equals ,всегда будет false,хотя содержимое одинаково=но это можно решить проверкой выборочных элементов массива
но самое главное что я не могу никак получить такой же байт массив из джейсона ,да что там из джейсона я даже такой же байт массив не могу получить делая вот такие манипуляции
	TemplateGroup templateGroup = TemplateGroup.builder()
				.groupCode("2")
				.groupName("sss")
				.groupDescription("sds")
				.groupOrder(3)
				.build();
		ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
		ObjectOutputStream objectOutputStream=new ObjectOutputStream(byteArrayOutputStream);
		objectOutputStream.writeObject(Collections.singleton(templateGroup));
		byte[] bytes=byteArrayOutputStream.toByteArray();

		Exporter exporter=new Exporter();
		 byte[] result =exporter.toBytes(Collections.singletonList(templateGroup));
		assertEquals(bytes.length,result.length);
		assertEquals(bytes[5],result[5]);
		assertEquals(bytes[10],result[10]);
		assertEquals(bytes[20],result[20]);
		assertEquals(bytes[30],result[30]);

	}

хотя передаю один и тот же объект и
mapper.writeValueAsBytes(list)
эквивалентно byteArrayOutStream.toByteArray
31 июл 20, 13:39    [22176142]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
SpringMan
Member

Откуда:
Сообщений: 205
1) В junit-е есть assertArrayEquals
2) Ты не веришь jackson-у? Он по идее всегда выдает один и тот же массив байт, проверь исходящие кодировки и одинаково ли сконфигурированы ли ObjectMapper-ы

Сообщение было отредактировано: 31 июл 20, 13:45
31 июл 20, 13:48    [22176147]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
SpringMan
1) В junit-е есть assertArrayEquals
2) Ты не веришь jackson-у? Он по идее всегда выдает один и тот же массив байт, проверь исходящие кодировки и одинаково ли сконфигурированы ли ObjectMapper-ы

спасибо попробую

у меня вопрос такой если я беру джейсон и беру объект поля там одинаковы- то если привести это в байт массивам они же должны быть идентичны?
но почему то не получается идентичност
31 июл 20, 13:55    [22176157]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
SpringMan
Member

Откуда:
Сообщений: 205
Это зависит от кодировки, последовательности полей, индивидуальные особенности сериализаторов и т.п. Посмтри эти массивы как на строки, сравни кодировки и найдешь в чем отличия

Сообщение было отредактировано: 31 июл 20, 13:57
31 июл 20, 14:00    [22176160]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,

Ты прикладной код пишешь? Тогда зачем сравнивать байты?
31 июл 20, 14:17    [22176178]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,
>тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
=
Есть волга и тойота. Я должен разобрать их на винтики и сравнить между собой.
Так?
31 июл 20, 14:21    [22176182]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
PetroNotC Sharp
Zzz79,
>тоесть у меня есть джейсон - я долджен его положить в байт массив и сравнить с тем что выдаст вот этот метод
=
Есть волга и тойота. Я должен разобрать их на винтики и сравнить между собой.
Так?

типо того,только и волга и тойота в моем случае тойота ,только разобраны разными методами)
31 июл 20, 14:29    [22176195]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.
31 июл 20, 14:32    [22176199]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5355
Zzz79,

Я сомневаюсь что БЛ у тебя "Разные методи разборки машин"
))))
31 июл 20, 14:33    [22176201]     Ответить | Цитировать Сообщить модератору
 Re: Юнит тест,проблема с моком  [new]
Zzz79
Member

Откуда:
Сообщений: 559
PetroNotC Sharp
Zzz79,

Угу. Отсюда вопрос, что тестируем? И нафига разбирать на байты?
Хибер решает тойота или волга тупо по id записи в бд.

я же те показал что тестируем)

метод выше
31 июл 20, 15:00    [22176234]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Java Ответить