Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Юнит тесты для "системного" приложения

2301  1 2 3 4 5 6 7 8 9 все
AlexNek патриот19.04.21 16:21
AlexNek
NEW 19.04.21 16:21 
в ответ Программист 19.04.21 15:45
1) для того, чтобы код был тестируемым.

Вот именно с этим у меня и наблюдаются проблемы.

Я не хочу исключительно только для тестирования добавлять море вещей которые мне совсем не нужны.


2) чтобы класс отвечал только за то, чем он занимается.

А класс и не занимается сжатием, за это отвечает другой класс.

Если кто-то захочет изменить сжатие, то он будет это менять в другом месте.


3) расширяемость

Зачем предусматривать расширяемость, когда эта расширяемость не понадобится.

Ну зачем мне автомобилю делать складываемые крылья или цеплять замаскированный парашют, на тот случай если он вдруг упадет в ущелье?

AlexNek патриот19.04.21 16:34
AlexNek
NEW 19.04.21 16:34 
в ответ MrSanders 19.04.21 16:11
Event-ы наше всё!

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

Записывать все данные может быть и можно. Но для этого у меня и так внешний Action есть.

Программист коренной житель19.04.21 16:48
NEW 19.04.21 16:48 
в ответ AlexNek 19.04.21 16:21
Я не хочу исключительно только для тестирования добавлять море вещей которые мне совсем не нужны.

Ну нет проблем :) Просто в таком случае ты пишешь код, который нельзя протестировать юнит-тестами. Есть и другие способы протестировать код :)


А класс и не занимается сжатием, за это отвечает другой класс.
Если кто-то захочет изменить сжатие, то он будет это менять в другом месте.

Твой класс как минимум создает объект, который занимается сжатием и конфигурирует/инициализирует этот объект.


Зачем предусматривать расширяемость, когда эта расширяемость не понадобится.

Затем, что это приятный бонус, который ты получаешь совершенно бесплатно, если проектируешь софт по определенным правилам :)


Ну зачем мне автомобилю делать складываемые крылья или цеплять замаскированный парашют, на тот случай если он вдруг упадет в ущелье?

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

AlexNek патриот19.04.21 17:31
AlexNek
NEW 19.04.21 17:31 
в ответ Программист 19.04.21 16:48
Твой класс как минимум создает объект

Ну и что, кто то всё равно должен его создать. Всё что мы теряем - это динамическая замена. Которая относится к разряду ненужных.


если проектируешь софт по определенным правилам

правила и так есть, только не следует понимать их буквально.

То бишь, нужно мне в классе, допустим, 10 операций, то всех их абсолютно обуть в классы и интерфейсы и инициализировать строго снаружи.


В автомобиле можно поставить вместо приборной доски полноценный дисплей

Можно, но вот парашют и крылья считаешь, что не нужно?

Вот у меня такое же деление и есть, когда нужно - то делаем, когда не нужно - то нет.


А вот лет 50 так назад, ты бы тоже считал, что можно поставить туды "полноценный дисплей"?

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


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


AlexNek патриот19.04.21 22:08
AlexNek
NEW 19.04.21 22:08 
в ответ AlexNek 19.04.21 17:31

Вообще то, как оказалось, есть более приемлемый метод для меня.

достаточно вместо

compressor.Compress(fileName);

написать

CompressFile(fileName);


virtual void CompressFile(string fileName)

{

compressor.Compress(fileName);

}


А затем уже замокать эту виртуальную функцию.

koder патриот20.04.21 06:48
koder
NEW 20.04.21 06:48 
в ответ AlexNek 17.04.21 20:02
Ну вот если устройство мне посылает дату 30.02.2021 - это как класифицировать?

Сорры. Только сейчас заметил


Это особенность устройства. Программист писал насчет фичи, но общий принцип такой - устройство может посылать инфу в определенном кодирунге, на китайском языке, в странном формате. Если такой вывод использовать нельзя, то и устройство использовать нельзя. Если можно с последующей обработкой. то нужен код обработки. Но долбить эту особенность устройства юниттестами (долбить - потому что юниттесты запускаются автоматически регуларно, проверяя код) нет смысла - особенность устройства извeстна и не изменится. А вот собственный код обработки особенности можно и нужно


Murr патриот20.04.21 12:15
Murr
NEW 20.04.21 12:15 
в ответ koder 20.04.21 06:48

особенность устройства известна и не изменится

-----

Хи-хи...

Из того что помню.

Три завода, три инсталяции Оракла.

Каждая инсталяция - мало того что другой версии, так еще и со своей локалью.

Соответственно - формат даты и времени - разный, порядок сравнения и сортировок - тоже разный.

Код - общий для всех баз...


нет смысла

-----

Оно, вообще-то, программируемое. безум

Программист коренной житель20.04.21 13:12
NEW 20.04.21 13:12 
в ответ Murr 20.04.21 12:15
Хи-хи... Из того что помню.Три завода, три инсталяции Оракла.Каждая инсталяция - мало того что другой версии, так еще и со своей локалью.Соответственно - формат даты и времени - разный, порядок сравнения и сортировок - тоже разный.Код - общий для всех баз..

Ты реально не понимаешь, что нет нужды тестировать порядок сравнения и сортировку в Оракле? Или просто прикидываешься?

AlexNek патриот20.04.21 13:25
AlexNek
NEW 20.04.21 13:25 
в ответ koder 20.04.21 06:48
Если такой вывод использовать нельзя, то и устройство использовать нельзя.

вывод использовать нельзя, но вот устройство нужно.

Это как раз и тестирует "мой" код - он не должен обваливаться если даже устройство пошлет что то неправильное.

Так что тесты нужны, хоть часть будет юнит тестами, а часть интеграцион тестами.


особенность устройства извeстна и не изменится

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

Всё нужно проверять. Пару раз железячников на этом и поймали.

koder патриот20.04.21 15:42
koder
NEW 20.04.21 15:42 
в ответ Murr 20.04.21 12:15
Каждая инсталяция - мало того что другой версии, так еще и со своей локалью.

Как часто у одной инсталляции менялись свойства?


Оно, вообще-то, программируемое.

Ты хотел сказать конфигурируемое. Програмируемое - это дата 31.02.2021. Напрограмировали


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


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


Потом если у инсталляции установили китайскую локаль, то значит так надо было. Не думаю, что имеет смысл в приложении опрашивать текущую локаль базы данных. Я даже не заню, кто то это делает? Просто настраивают систему (прога+база) и это эта связка до следующей настройки считается неизменяемоj

Murr патриот20.04.21 21:19
Murr
NEW 20.04.21 21:19 
в ответ Программист 20.04.21 13:12

нет нужды

-----

Не-не, нету...

Есть нужда проверять правильно ли строится СКЛ... так ВБ6-лике спагетти...

Я как подумаю об коде в котором надо такое тестить так желание что-то делать пропадает напроч'...

Murr патриот20.04.21 21:23
Murr
NEW 20.04.21 21:23 
в ответ AlexNek 20.04.21 13:25

вывод использовать нельзя, но вот устройство нужно.

------

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

AlexNek патриот20.04.21 21:38
AlexNek
NEW 20.04.21 21:38 
в ответ Murr 20.04.21 21:23
надо дрючить девайсе из тестов

девайс не надо, только приложение.

Murr патриот20.04.21 21:38
Murr
NEW 20.04.21 21:38 
в ответ koder 20.04.21 15:42

Как часто у одной инсталляции менялись свойства?

------

А какая разница?

Я не контролирую сервера - может поменяться в любой момент и без уведомления.

То, что это не декаки с момента установки ситуацию никак не меняет.


Проверить все это невозможно даже в принципе.

-----

Ну наконец-то... правда пока не вижу понимания того что проверить можно только то об чем знаешь...



значит так надо было.

------

Да ну?

Мне вот всегда казалось, что это от непонимания того, что от этого что-то зависит.

По крайней мере в рамках одного предприятия.



Не думаю, что имеет смысл в приложении опрашивать текущую локаль базы данных.

------

Т.е. принимается как норма, что как только в запросе требуется фильтрация по дате, то приложение дожно упасть? Ну или выдать какую-нибудь чушь...



Не думаю, что имеет смысл в приложении опрашивать текущую локаль базы данных.

------

Еще раз.

Автоматизированное рабочее место.

Одна инсталяция программы.

Работает с тремя различными серверами, каждый из которых имеет свой диалект СКЛ и другую локаль.

Я чего - должен бегать туда каждый раз как девочке приспичит что-то сделать на другом серваке?

Murr патриот20.04.21 21:50
Murr
NEW 20.04.21 21:50 
в ответ AlexNek 20.04.21 21:38

девайс не надо, только приложение

------

Присылали мне как-то файлик для импорта.

Без документации на формат - только ссылка на то, что он в каком-то внутреннем стандарте третьей стороны - они ничего другого экспортировать не умели. Готового редера - не было.

Внутри только дат было три разных формата, причем один из них вводился текстом в ручную...

Так будем тестить приложение или будем дрючить источник?

koder патриот20.04.21 21:50
koder
NEW 20.04.21 21:50 
в ответ Murr 20.04.21 21:38
Я чего - должен бегать туда каждый раз как девочке приспичит что-то сделать на другом серваке?

Даже чаще. Проверять локаль. А вдруг девочке приспичило и ты пропустил смену локали😀

Программист коренной житель20.04.21 22:33
NEW 20.04.21 22:33 
в ответ koder 20.04.21 21:50

ЕМНИП Datetime - это просто число и локаль там по большому счету не нужна. А для того, чтобы безошибочно конвертнуть строку в DateTime можно использовать функцию CONVERT и передавать в ней дату в любом удобном и при этом заранее изместном виде :)


Подозреваю, что Murr как обычно простелил себе колено :)

Murr патриот20.04.21 23:02
Murr
NEW 20.04.21 23:02 
в ответ Программист 20.04.21 22:33

это просто число

------

Вообще-то, в контексте СКЛ это будет строка в определенном формате.


можно использовать функцию CONVERT

------

Можно.

Но можно упереться в ограничение на длинну выражения в IN... безум

И, кстати, КОНВЕРТ тормозит довольно прилично... хотя основное - он там вообще не нужен, если не требуется вывод в определенном формате...



Murr как обычно простелил себе колено

-----

Ну если понимае маленького момента что локаль базы и локаль сессии - это две независимых локали есть выстрел в колено - то - да, прострелил оба... спок

Как насчет изучения мат.части? улыб

Murr патриот20.04.21 23:05
Murr
NEW 20.04.21 23:05 
в ответ koder 20.04.21 21:50

и ты пропустил

-----

Да-да... Я как-то пропустил смену локали у более чем 9 млд девочек... и меня это как-то совсем не беспокоит... не дергают и хорошо...

AlexNek патриот21.04.21 11:32
AlexNek
NEW 21.04.21 11:32 
в ответ Murr 20.04.21 21:50
Без документации на формат...или будем дрючить источник?

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

В моём случае задача - приложение не должно вылетать при любых ошибках в источнике.

Поэтому что и как выдает источник меня не волнует. Меня волнует, как я буду принимать данные с ошибками.

1 2 3 4 5 6 7 8 9 все