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

Откуда:
Сообщений: 3370
Полное непонимание сериализации. Через objectinputstream ты можешь прочитать только из бинарного файла то, что было записано objectoutputstream. А твой файл текстовый, так что тебе надо читать строку
27 июл 20, 10:30    [22174048]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Полное непонимание сериализации. Через objectinputstream ты можешь прочитать только из бинарного файла то, что было записано objectoutputstream. А твой файл текстовый, так что тебе надо читать строку

да мой косяк)

вообще как оказалось там таки нужно подставлять массив байт

тесты я написал
дали новые писать - там такая опа с интрефейсами накручена,что даже не понятно объект какого класса нужно прописать в тесте
настолько тут насрано ,что одни интерфейсы имплементируют дргие ,наследут абстрактные классы и тд - что можно жать вечно ctrl+ click и так не дойти до сути )
27 июл 20, 13:00    [22174144]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

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

дали новые писать - там такая опа с интрефейсами накручена,что даже не понятно объект какого класса нужно прописать в тесте

Сомнительная ценность таких тестов. Если по чесноку, то она равна 0%, и даже отрицательная. Потому что твою нетленку придется еще и поддерживать, чтобы компилялось.
Не зря говорят, что тесты нужно писать до написания собственно кода, и именно из тестов ты увидишь все косяки твоего API и все сторонние dependency.

Zzz79

одни интерфейсы имплементируют дргие ,наследут абстрактные классы и тд - что можно жать вечно ctrl+ click и так не дойти до сути )

Какая тебе разница до реализаций интерфейса? Они должны тестироваться в своих собственных тестах. Ты должен чекнуть спецификацию чисто своего куска кода, а как себя ведет имплментация интерфейса тебе должно быть глубоко пофиг. В принципе ты сам можешь написать свою реализацию, например тупо возвращаемую константу и все.
27 июл 20, 14:30    [22174198]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

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

Какая тебе разница до реализаций интерфейса? Они должны тестироваться в своих собственных тестах. Ты должен чекнуть спецификацию чисто своего куска кода, а как себя ведет имплментация интерфейса тебе должно быть глубоко пофиг. В принципе ты сам можешь написать свою реализацию, например тупо возвращаемую константу и все.


щас обьясню = на вход в тестириуемый метод мы подаем контекст,в котором мы берем документы и мапим их в объект

проблема в том ,что этот документ пресдставляет из себя цепочку вложенных документов,которые все их себя представляют имплементацию одного и того же интерефейса и угадать какую именно практически невозможно)
так как там такая завязка на наследованиях и имплементациях что чтобы понять что мокнуть - я потратил 4 часа и тупо рандомно нашел нужный класс )
теперь я понимаю почему никто не хочет на легаси идти- тут реально можно неделями втыкать - пытаясь найти истину)
27 июл 20, 15:05    [22174217]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
вот такая вот шляпа тут например

тестируемый метод

static List<FieldsGroup> getFieldsGroup(IDictionary fieldGroups)

чтобы его затестить мне нужно что то передать в качестве аргумента- мок или руками сделаный объект
а вот чтобы узнать какой именно объект - нужно потратить пару дней
так как IDictionary это интерфейс
public interface IDictionary extends IDataManipulationSupport, IDataProvider, Iterable<DataRecord>

в свою очередь
public interface IDataManipulationSupport extends
		IInsertSupport,
		IUpdateSupport,
		IDeleteSupport,
		IMoveUpSupport,
		IMoveDownSupport {
}


и там такое можно пару дней читать просто прыгая по интерфейсам

если тыкать в конкретные реализации- там тысячи классов будут- какой передать в агрументы - одному богу известно)
27 июл 20, 15:11    [22174218]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
Понятное дело что для того кто когда то писал этот код,будет очевидно что сюда дать на вход в качестве аргумента

мне вот лично не понятно и как найти непонятно - описания нет,интрефейсы все в клубок завязаны - я так думаю если проследить цепочку от А до Я в итоге Я будет implements А ))
я думаю что это просто нарушение архитектуры правильной,в нормально отстроеном проекте -такого априори быть не может ,чтобы на вход подавался интрейфейс верхнего уровня - это бред же
27 июл 20, 15:17    [22174223]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

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

проблема в том ,что этот документ пресдставляет из себя цепочку вложенных документов,которые все их себя представляют имплементацию одного и того же интерефейса и угадать какую именно практически невозможно)

Проблема в том что ты не слушаешь того что тебе говорят. Ну и код говно до кучи.
Ты тестируешь некий метод,
static List<FieldsGroup> getFieldsGroup(IDictionary fieldGroups)

смысл юнит-теста в томчтобы протестировать то что происходит внутри метода, тебе до звезды, что за Idictionary тебе передали, главное что он выполняет контракт IDictionary, а том числе это может быть null, или IDictionary, все методы которого возвращают 0, null и т.д.
Твоя задача проверить что получив НЕКИЙ IDictionary твой код ведет себя согласно спецификации. Если ты пишешь тест и мечешься, потому что тебе нужно подставить определенный IDictionary - это уже не юнит тест, это говно, которое надо сразу выбрасывать.
27 июл 20, 15:40    [22174238]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

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

смысл юнит-теста в томчтобы протестировать то что происходит внутри метода, тебе до звезды, что за Idictionary тебе передали, главное что он выполняет контракт IDictionary, а том числе это может быть null, или IDictionary, все методы которого возвращают 0, null и т.д.
Твоя задача проверить что получив НЕКИЙ IDictionary твой код ведет себя согласно спецификации. Если ты пишешь тест и мечешься, потому что тебе нужно подставить определенный IDictionary - это уже не юнит тест, это говно, которое надо сразу выбрасывать.

ты не прав)

если мне нужно протетить метод int sum(Number a){
return a*a;
такой метод я не смогу протестировать и ты я думаю сам видишь ответ ,тоесть такой даже не скомпилируется


В моем случае тоже самое - IDictioonary интерфейс верхнего уровня - там есть иплементации и поля и строки и рекорды и еще около пары сотен классов ,какой из них необходим на подачу в тест - непонятно
тоесть чтобы мокнуть это я должен хотя бы приблизительно значть что мокать)
27 июл 20, 16:23    [22174264]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

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

если мне нужно протетить метод int sum(Number a){
return a*a;
такой метод я не смогу протестировать и ты я думаю сам видишь ответ ,тоесть такой даже не скомпилируется

Ну допустим, не скомпилируется, при чем тут это? По-хорошему тебе даже импелемнтацию СВОЕГО метода знать не нужно(при нормальной разработке) Вот метод
int sum(Number a, Number b){


Вот контракт
Результатом метода должна быть сумма двух переданных чисел.
Если одно или оба из них null - вернуть 0.
Если результат вещественный, то результат должен быть округлен к ближайшему целому


Зная сигнатуру и контракт метода ты идешь и пишешь тест.
assert(sum(1, null) == 0)
assert(sum(null, null) == 0)
assert(sum(null, 2) == 0)
assert(sum(1, -1) == 0)
assert(sum(1, 2) == 3)
assert(sum(1, -2) == -1)
assert(sum(1, 1.99) == 3)
assert(sum(1, 1.01) == 2)
assert(sum(1, 1.5) == 3)


Zzz79

В моем случае тоже самое - IDictioonary интерфейс верхнего уровня - там есть иплементации и поля и строки и рекорды и еще около пары сотен классов ,какой из них необходим на подачу в тест - непонятно

Непонятно, и не должно тебя волновать, как я уже два раза сказал
Zzz79

тоесть чтобы мокнуть это я должен хотя бы приблизительно значть что мокать)

Вот тут доля правды есть. Обьяснение проблемы тут достаточно долгое, если говорить простыми словами, функция, которая принимает сложный объект, и внутри реботает с вложенными в него объектами или частями - это говнокод, передаваться должен только top-level объект, необходимый для логики, и в тестируемом методе ты должен обращаться только к полям и методам(и то нежелательно) этого объекта.
method(Context ctx) {
  val a = ctx.getTemplate()
  val b = Optional.of(ctx.retrieveEmployee(1).getDepartment())
return someth..
}

Этот метод не очень

method(Template t, Optional<Integer> employeeId) {
return someth..
}

Этот гуд.

Но ты прав, что иногда тебе все равно надо знать, какой метод интерфейса вызовется, это ООП детка. И тут да, тебе именно его и надо мокать, но вот результат вызова мока - может быть любой
27 июл 20, 16:49    [22174283]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

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

Этот гуд.

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

так я тебе про это и говорю результат то понятно любой,а вот что мокать было не понятно))

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

[SRC JAVA]OperationContext context = CONTEXT;

Export.commonSave(context)/SRC]

сказали выше груви не пускать експешены- получается использовать тут конструкцию трай кетч надо?
27 июл 20, 18:13    [22174330]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

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

так я тебе про это и говорю результат то понятно любой,а вот что мокать было не понятно))

Не, ты так нифига и не понял. И так и будешь продьюсить унылое говно, на которое же и жалуешься.
И не надо песен, что код уже написан. В твоем случае делается простой рефакторинг, когды ты экстрактишь метод с бизнес логикой, куда приходит готовый темплейт и ты тестишь обработку. Все остальное тестируется в интеграционном тесте, включая груви и обработку эксепшенов, но ты же знаешь как лучше
27 июл 20, 18:48    [22174350]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

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

так я тебе про это и говорю результат то понятно любой,а вот что мокать было не понятно))

Не, ты так нифига и не понял. И так и будешь продьюсить унылое говно, на которое же и жалуешься.
И не надо песен, что код уже написан. В твоем случае делается простой рефакторинг, когды ты экстрактишь метод с бизнес логикой, куда приходит готовый темплейт и ты тестишь обработку. Все остальное тестируется в интеграционном тесте, включая груви и обработку эксепшенов, но ты же знаешь как лучше

груви вообще просто дергает джава метод
все остальное там и есть один этот метод) тоесть непонятно о каких интеграционных тестах ты говоришь

контекст это есть контекс по аналогу спринга,мокнуть его нельзя он синглтон,на этом все)

пс тесты я написал - замокал кэш,но я все равно не понимаю как в аргументы конкретного метода можно вываливать интрефейс такого уровня- это 100% ошибка архитектуры проекта,когда сам автор запутавшись в своих интрефейсах решил не ломая дров брать верхний,это как у нас было где то с ошибками,когда там настолько накрутили,что потом тупо Exeption e))
27 июл 20, 18:59    [22174357]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Ой все..(с)
27 июл 20, 19:03    [22174363]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
ну и рефакторить я конечно же не буду- 1 за это не платят
2.задач и так овер дохрена
3.говорят что таки скоро выделят ресурсы под переход ядра на микросервис
4.я еще слабо понимаю меаханнику работы нашего детища- тоесть рефакторить надо с пониманием того что ты хочешь видеть вместо того что есть ,тоесть рефактор ,тем более такой глубокий - должен исходить от человека ,который хотя бы пол года там поковырялся
5.Предложенный тобой рефакторинг касается ядра приложения - это согласуется с руководством- так просто даже доступ к репе не получишь
27 июл 20, 19:06    [22174365]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Ну у меня лимит времени тоже есть, не хочешь пытаться понять как правильно - дело твое, только вот из такой позиции и вырастают 15-летние монстры с кучей говнокода и xml-портянок. И не надо пи..жа про невозможность рефакторинга, если ты сам с нуля его из груви выдрал то также легко его можешь и преобразовать. Разбить класс на тестируемую часть и контексто-зависимую тебе мешает только лень и непонимание
Судя по теме с андрейкой до тебя дойдет года через полтора. может быть.
27 июл 20, 20:07    [22174384]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
забыл ник
Ну у меня лимит времени тоже есть, не хочешь пытаться понять как правильно - дело твое, только вот из такой позиции и вырастают 15-летние монстры с кучей говнокода и xml-портянок. И не надо пи..жа про невозможность рефакторинга, если ты сам с нуля его из груви выдрал то также легко его можешь и преобразовать. Разбить класс на тестируемую часть и контексто-зависимую тебе мешает только лень и непонимание
Судя по теме с андрейкой до тебя дойдет года через полтора. может быть.

согласен мб и дойдет) щас я на уровне тока оперившегося мидла - мне бы тупо таски свои выполнять ,а ты про рефакторинг)
я те ж говорю я тупо не отдупляю 80% как там что работает)

я на прошлом проекте то начал понимать что к чему только спустя 3 месяца а ты говришь тут рефактор сидя на проете неделю
27 июл 20, 20:45    [22174393]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
забыл ник
Member

Откуда:
Сообщений: 3370
Zzz79
забыл ник
Ну у меня лимит времени тоже есть, не хочешь пытаться понять как правильно - дело твое, только вот из такой позиции и вырастают 15-летние монстры с кучей говнокода и xml-портянок. И не надо пи..жа про невозможность рефакторинга, если ты сам с нуля его из груви выдрал то также легко его можешь и преобразовать. Разбить класс на тестируемую часть и контексто-зависимую тебе мешает только лень и непонимание
Судя по теме с андрейкой до тебя дойдет года через полтора. может быть.

согласен мб и дойдет) щас я на уровне тока оперившегося мидла - мне бы тупо таски свои выполнять ,а ты про рефакторинг)
я те ж говорю я тупо не отдупляю 80% как там что работает)

я на прошлом проекте то начал понимать что к чему только спустя 3 месяца а ты говришь тут рефактор сидя на проете неделю


Ну ладно, вижу нотки просветления, поэтому попробую еще раз -

Условно, у тебя был груви скрипт, в котором создается\пробрасывается какой-то контекст, в этом контексте содержится какой-то путь к шаблону, который вычитывается, делается какая-то логика и т.д.
Твоя задача протестировать это все. Как к ней подойти? Обычно в любой логике есть инфраструктурная(создать контекст, вычитать файл, вытянуть оюъект юзера из базы и тд) и бизнес-логика(берем юзера считаем его зарплату, или есть строка с содержимым файла щаблона, мы прогоняем какой-то реплейс, чтобы заменить %date% на 2020-02-15). Чем лучше ты будешь отделять первое от второго, тем чище, понятнее и тестируемее будет твой код. Далее, чтобы иметь некий левел уверенности в корректности своего кода надо создавать на него тесты. Для бизнес-логики юнит-тесты(на вход что-то и чекаем выход), эти тесты ни в коем случае не должны зависеть от внешнего окружения. И интеграционные тесты(когда тебе надо поднять окружение для успешной работы).
Так вот,в твоем случае как бы поступил я - в груви оставил все вещи специфичные к контексту
Context = loadContext
template = context.getTemplateAsString
JavaClass.handle(template)

, а java код имел бы интерфейс что-то типо
public String handle(fileContent: String) = {
  logic here
}

и написал на него юнит-тест, куда просто передавал сформированную строку и чекал что выход корректный.
На все остальное - либо забить, либо написать интеграционный тест, в котором ты вызываешь груви скрипт и чекаешь допустим что файл создался и имеет правильный контент. А все эти моки, стабы, моки синглтонов и т.д - ну такое.. если любишь заниматься сексом в зад, то это конечно твое..
Что тебе мешает это сделать? Или все еще непонятно?
27 июл 20, 21:53    [22174420]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
PetroNotC Sharp
Member

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

>public String handle(fileContent: String) = {
logic here
}
+1
28 июл 20, 07:36    [22174510]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
Zzz79
Member

Откуда:
Сообщений: 583
все это лирика)

вот мне дали новую таску
сделать так чтобы импортируемые/экспортируемые шаблоны не терялись при смене бд -тоесть сейчас там по Id берется а надо по коду

так вот вроде задача как задача - но при сохранении шаблона я уже 4й час ищу в какой таблице он лежит и там около 4000 тысяч таблиц как найти непонятно
все что у меня сейчас есть это при выгрузке шаблона id по этому id я могу найти запись в одной из таблиц- но самого шаблона там нет- там должны же быть поля и тд
чо делать хз - в коде при сохранении пишет вот так
IDictionary dic = Context.newDictionary("doc_maker/doc/isimple_template");


но тут нет такой таблицы....
это пиндей короче - все что я уже 2ю неделю делаю это пытаюсь найти в этой куче кода то что мне надо - хотя в данный момент я вообще не понимаю что от меня хотят если честно)
28 июл 20, 12:13    [22174581]     Ответить | Цитировать Сообщить модератору
 Re: JSON to byte array  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
Zzz79,
Прыгаешь с темы на тему как в ПТ.
28 июл 20, 12:51    [22174593]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Java Ответить