15.03.2017, 12:20 | #61 |
Участник
|
Надо написать такой набор тестов, чтобы написать по ним правильный код было легче чем написать неправильный. Например, проверить каждый параметр по отдельности на явно заданное значение и тот случай, когда они все вместе включены (если они должны быть связаны через && в запросе). Умолчания будут проверяться при проверке отдельных других параметров.
|
|
20.03.2017, 09:42 | #62 |
Участник
|
Цитата:
Сообщение от belugin
А еще есть книжка Эффекстивная работа с унаследованным кодом там как раз про то, как писать тесты для говнокода.
Как и все подобные книги, авторы исходят из предположения, что код можно и нужно менять. Дается обоснование, почему "боязнь изменений" - это плохо Далее даются советы, как лучше делать эти изменения. Как я уже говорил в самом начале этой ветки, для dynamics продуктов это предположение неверное. Большинство приемов связанных с расщеплением, охватом не работают. (см. приложенные скриншоты) Так в аксапте нельзя менять сигнатуры методов, которые находятся в sys-слоях. Можно только расширять сигнатуры. Что и делается параметрами по умолчанию. Откуда собственно и появилась ветка. Причем нельзя менять не только клиентам и партнерам. Нельзя менять и самому майкрософту, чтобы не потерять совместимость кода. Поэтому для Аксапты нужны адаптированные методы. Но пока я вижу только советы: тестировать только свои изменения. Критерий - здравый смысл. Что ж, и такие советы тоже не так уж и плохи. Спасибо. Ближайший аналог: разработка с закрытыми dll или com-компонентами. В свой проект вы можете добавить закрытый код. Но не можете его изменить. Вы можете создать свой охватывающий объект. Но не можете изменить поведение другого стандартного кода, который использует закрытый код (вернее можете. но выполнив закат солнца вручную) и скорее нужно искать приемы разработки с подобными закрытыми компонентами. Создал новую ветку Как правильно вести разработку в условиях, когда часть кода закрыта от изменения - Sys-слой в аксапте, закрытые codeunit в навике, extensions в MS CRM Если у кого есть соображения именно по unit-тестированию, велкам в эту ветку, котороая называется: Как правильно выполнять unit-тестирования методов с параметрами по умолчанию на ваш взгляд? |
|
20.03.2017, 10:50 | #63 |
Участник
|
Я не очень понял чем это концептуально отличается от тестирования той же функциональности, но выраженной в коде другими средствами?
Можно ввести какой-то свой API в виде отдельных фнукций для удобства (см мое первое сообщение в этом треде). Цитата:
Ближайший аналог:
разработка с закрытыми dll или com-компонентами. |
|
20.03.2017, 11:03 | #64 |
Участник
|
Цитата:
Сообщение от mazzy
Как и все подобные книги, авторы исходят из предположения, что код можно и нужно менять. Как я уже говорил в самом начале этой ветки, для dynamics продуктов это предположение неверное.
Так в аксапте нельзя менять сигнатуры методов, которые находятся в sys-слоях. Причем нельзя менять не только клиентам и партнерам. Нельзя менять и самому майкрософту, чтобы не потерять совместимость кода. \Classes\RunBase\dialog в AX2009: X++: protected Object dialog(DialogRunbase _dialog = null, boolean _forceOnClient = false) X++: protected Object dialog() Цитата:
По мне - умерла, так умерла: если надо существенно поменять сигнатуру стандартного метода, то надо это сделать - и по возможности использовать нормально типизированные параметры, а не безликие boolean-флажки, чтобы компилятор заметил несоответствия в вызывающем коде, а еще лучше, по-моему, вместо хрендцати параметров использовать data transfer objects (DTO), в которые можно добавлять новые свойства, не переделывая каждый раз сигнатуру вызываемого метода. Извините, что не в тему, наболело. Последний раз редактировалось gl00mie; 20.03.2017 в 11:34. Причина: typo |
|
20.03.2017, 11:43 | #65 |
Участник
|
Цитата:
Цитата:
вуаля, ответ готов. самое интересное, как всегда, не что сказано, а что пропущено. )))) Цитата:
Цитата:
про майкрософт - согласен. про "добавление параметров по умолчанию" - по прежнему считаю, что это очень распространенный подход в аксапте Цитата:
Сообщение от gl00mie
По мне - умерла, так умерла: если надо существенно поменять сигнатуру стандартного метода, то надо это сделать - и по возможности использовать нормально типизированные параметры, а не безликие boolean-флажки, чтобы компилятор заметил несоответствия в вызывающем коде, а еще лучше, по-моему, вместо хрендцати параметров использовать data transfer objects (DTO), в которые можно добавлять новые свойства, не переделывая каждый раз сигнатуру вызываемого метода.
А как это эффективно и правильно сделать в существующем инструментарии? И с существующим унаследованным кодом? Собственно тема как раз про это ) |
|
20.03.2017, 11:51 | #66 |
Участник
|
|
|
26.03.2017, 17:02 | #67 |
Участник
|
Вообще, вопрос, поднятый в теме так и просится разбиения на два:
X++: if (prmIsDefault(...))
{
...
}
else
{
...
} А для второго варианта универсального подхода просто может и не быть, все зависит от задачи. Сам по себе факт наличия 11 параметров метода наталкивает на мысль от том, что с методом что-то не так. А если учесть, что в этом же классе есть публичный NEW с количеством параметров, превышающем десяток (по крайней мере в DAX2009 это так), то возникает вопрос все ли в порядке с самим классом. Например (не претендую на истину в последней инстанции, это только мое личное мнение):
Цитата:
сколько тестирующих методов должно быть
Соответственно:
Вообще, unit тесты совсем не про то, что все работает правильно. Они проверяют работает ли метод (класс в целом) так как считает разработчик при проектировании этого метода/класса. Вполне нормальный вариант, что правильность (а не формальность) выносится уже на уровень функциональных тестов. Последний раз редактировалось Raven Melancholic; 26.03.2017 в 17:11. Причина: Орфографические и грамматические ошибки |
|