Вопрос к тестировщикам
Различия между этими тестами - выбрасываесое исключение.
------
Перечисли, плс, ВСЕ, выбрасываемые в данных условиях, исключения.
Я знаю наиболее часто выбрасываемые, но не знаю все ли знаю.
На всякий случай - там будут не только оракловские - есть пара дыр куда провалятся
некоторые из системных. Но это будет крайне редко. Мне все получить не удалось.
Ждем список - он определит какие тесты надо написать.
Группы исключений будут перечислены в логе.
-----
Ну и замечательно - тестер будет читать логи. А откуда лог то появится?
Ну и остается вопрос - что делать с теми исключениями, которые не попали в логи.
Ну просто в процессе работы/тестов не случилась комбинация условий при которых
оно выпадет.
программа принудительно высывает функцию Close.
-----
Могу повесить закрытие в финалли. Только это без толку - вроде оракловский Клосе
не закрывает коннект, а лишь возвращает его во внутренний пулл.
Это, однако, не решает проблему - коннект - закроется, пусть по таймауту пулла,
а сокет в данной ситуации - не освободится. При этом хандле сокета будет потерян.
Просто потому, что Оракловский Коннецтион НЕ обрабатывает данную ситуацию.
Так что через время система элементарно подвиснет из-за отсутствия возможности
получить новый сокет для коннекта.
Какими тестами ты собираешься гарантированно выяснить данную проблему?
Напомню - Оракловский код - черный ящик и проблема - за пределами твоего кода/тестов.
Просто не могу гарантированно получить все комбинации условий и реакцию системы
и коннектиона...
У тебя же нет тестов, которые проверяют, что ты правильно реагируешь на внештатные ситуации
------
У тебя, однако, их тоже нет.
В силу того, что ты не знаешь какая именно будет ситуация.
Разница - Я все же пытаюсь выяснить реальную причину и обработать источник проблемы,
ну а ты - проверяешь реакцию своей системы на внештатную ситуацию.
Т.е. у меня кое-как, медленно, но будет работать в указанных условиях,
ну а у тебя будет единственная доступная реакция на нештатную ситуацию - ничего не делаем.
Не надо мне указывать, что именно надо подменять.
-----
Ну здрасте...
Я говорю что именно мне надо проэмулировать, а ты подменяешь задачу совершенно другой.
Причем и в подмененной задаче не можешь гарантировать полное покрытие тестами,
но настаиваешь на том что это единственно правильное решение.
протестировать свой код
-----
Ну хорошо - пусть ты нашел 99% выбрасываемых исключений и даже написал какой-то
функционал по тестированию.
Тебе это как-то поможет:
- определить что ситуация имеет место быть?
- вылечить данную проблему для всех (ора, мс, пост, мускул) коннектинов?
По поводу своего кода Я уже писал - могу задавить проблему у себя в коде. Там - не сложно.
Но вот гарантировать что оно будет 100% работать - нет, не могу. Хоть с тестами, хоть без.
по WLAN?
------
Не-а... Там отдельный, но сертифицированный под местные требования, протокол.
Об этом Я тебе уже говорил - неоднородная там, однако, сеть.
И ты хочешь сказать, что это все правда?
-----
Смотри - ZigBee.
Перечисли, плс, ВСЕ, выбрасываемые в данных условиях, исключения.
Ты на старости лет заболел максимолизмом?
А откуда лог то появится?
Лог появится от клиента. Это не очевидно?
Ну и остается вопрос - что делать с теми исключениями, которые не попали в логи.
В логи не попали те исключения, которые не были выброшены, с ними ничего делать не надо, т.к. их нет.
Ну просто в процессе работы/тестов не случилась комбинация условий при которых оно выпадет.
Тесты не предназначены для того, чтобы создавать какие-то там новые комбинации условий. Тесты нужны для того, чтобы убедиться, что существующий функционал не изменен.
Это, однако, не решает проблему - коннект - закроется, пусть по таймауту пулла, а сокет в данной ситуации - не освободится. При этом хандле сокета будет потерян. Просто потому, что Оракловский Коннецтион НЕ обрабатывает данную ситуацию.
Ну да, и твое решение - это залезть рефлекшенами в OracleConnection и ручками закрыть сокет? :D
Какими тестами ты собираешься гарантированно выяснить данную проблему?
Для танкистов: ТЕСТИРОВАНИЕ ПРОВОДИТСЯ НЕ ДЛЯ ТОГО, ЧТОБЫ НАЙТИ НОВЫЕ ПРОБЛЕМЫ. Я не знаю, сколько еще раз тебе это надо повторить.
У тебя, однако, их тоже нет.
Мне и не надо. Это твоя проблема :)
Я говорю что именно мне надо проэмулировать, а ты подменяешь задачу совершенно другой.
Ты пытаешься натянуть сову на глобус. OracleConnection намеренно скрывает от тебя то, как он работает. Для тебя, как пользователя данного класса никаких сокетов не существует. Хочешь работать с сокетами - делай свою реализацию. Если используешь класс OracleConnection, то исходишь из того, что OracleConnection работает правильно (ну или можешь запостить баг репорт в MS, может быть они его когда-нибудь пофиксят).
- определить что ситуация имеет место быть?
Не понял вопроса.
- вылечить данную проблему для всех (ора, мс, пост, мускул) коннектинов?
С ними все тоже самое, что и с ораклом - никто из этих коннектионов не дает тебе доступа к сокетам. Нравится тебе это или нет. Значит либо ты делаешь все сам на сокетах (одинаково для всех), либо принимаешь чужую компоненту и исходить из того, что она работает правильно.
Смотри - ZigBee.
ZigBee не в IP стеке, каким образом наличие ZigBee может повлиять на IP стэк? Может быть у вас там рукожопые админы?
Это не очевидно?
-----
Нет.
В случае с дублированным ИП - да будет лог с полной галиматьей из которой невозможно выловить причину.
Во втором случае - не будет никакого лога с ошибками - все операции пройдут штатно.
т.к. их нет.
-----
Кто это определил? Каким методом это сдеано? Есть основания утверждать что применный метод гарантирует их отсутствие?
это залезть рефлекшенами в OracleConnection и ручками закрыть сокет?
-----
Ты умеешь закрывать сокет к которому потерян хандле?
И это... оракловский коннецтион - не обязательно позволит лазить по нему рефлектионом... ну это так, для общего сведения...
OracleConnection намеренно скрывает от тебя то, как он работает.
-----
Мне абсолютно все равно как он работает до тех пор пока он работает.
В данной ситуации - он НЕ работает - не обрабатывает возникшую ситуацию,
Ну а моя задача - несмотря на сбои в коннектионе продолжить то что делал.
Сделаю Я это в прикладухе ловя ехцептионы и не гарантируя работоспособность или "починю" что-то еще - это уже моя забота.
исходить из того, что она работает правильно.
-----
Она работает правильно при определенных условиях. По задаче - данные условия - нарушены.
Дальше есть два возможных решения:
- устранить последствия неработоспособности компонента
- устранить причину неработоспособности компонента
Ты пытаешься сделать первое, ну а меня интересует второе.
Один из вариантов для второго - прописать в маршрутизаторе что запросы на определенный порт нужно директить не по ИП, а по МАКу... Но это можно сделать если установлена причина сбоев и есть понимание проблемы. Если чего то из этого нет - а у тестера с твоими требованиями ничего и близко нет - остается бороться со следствиями.
ZigBee не в IP стеке
-----
Ну так Я тебе изначально сказал что сеть неоднородная.
каким образом наличие ZigBee может повлиять на IP стэк?
-----
А зачем ему влиять на ИП-стек? Оно никоим образом не влияет на ИП-стек.
Может быть у вас там рукожопые админы?
-----
Может. Но что бы это утверждать с полной уверенностью надо назвать другую радио-систему, сертифицированную для применения в тех частях госпиталей, где не разрешают пользоватья мобильными телефонами.
А вот прогеры точно были никакие.
И работали они точно по описываемой тобою методике.
Но свой код они вылизали на 100%.
И не работает.
Чтобы тебя больше не мучать - понять почему не работает без точных знаний по функционированию ZigBee
все одно не получится - объясню совершенно неочевидную для прогера вещь: переход с ИП-сети на ZigBee
делается через... аналог КОМ-порта. Ограничения - стандартные... для КОМ-порта - буффер и скорость.
На переполнение буфера ZigBee никак внешне не реагирует - никакого ехцептиона к инициатору не уходит.
Ну это из простых и понятных вещей.
Из более сложных - в мире ZigBee существует несколько версий протоколов и несколько наборов команд.
То, что юзверь отправил - пойдет по цепочке ZigBee-устройств, характеристики каждого из которых
могут отличатся. Набор операций, которое способно выполнить первое в цепочке - не есть гарантия
что все остальные будут способны делать тоже самое. Чтобы там гарантировать работоспособность
надо ЗНАТЬ через устройство с каким набором команд и протоколом будет идти обмен. Добавь к этому
носибельность рутеров...
то ты в данном случае понимаешь под "приложение работает корректно" и что ты понимаешь под "пользователь не будет видеть там ошибок"?
Ну например так, чисто чтобы понятия объяснить. Загружаем приложение, работаем без проблем, подключаем усб диск, выскакивает окно - приложение будет закрыто, не то, что у вас в приложении произошло ххх.
Пользователь то считает, что ошибка в приложении.
Намекаю - вы пока ещё не поняли что такое юнит-тест.
Возможно никакой, возможно какой-нибудь проверяющий использование только тех функций, которые доступны в андроиде версии x.y
По хорошему вам нужен "деплоймент тест". И да, если хотите чтобы выше приложение работало на андроиде 6.0, 6.1, ... 9.12345 вам надо иметь устройства со всеми этими андроидами, чтобы быть на 95% уверенным что будет работать. Не благодарите, ваш КО.
Намекаю - вы пока ещё не поняли что такое юнит-тест.
Вообще то речь шла совершенно о другом. А конкретно о том что для подобных целей мне НУЖНО использовать юнит тесты.
чтобы быть на 95% уверенным что будет работать.
Да для себя я прогу делаю, мне нужно что бы эта скотина хоть на одном единственном устройстве кроме эмулятора запустилась. Раньше вообще даже и не думал про андроид, но с Xamarin можно и поиграться.
...
Потому как без камеры ничего нельзя попробовать. И есть большое подозрение, что дело из-за ZXing библиотек.
А конкретно о том что для подобных целей мне НУЖНО использовать юнит тесты.
Ну, я ж и говорю. Пока что не поняли что это такое. Потому что для "подобных целей" (проверить что продукт будет работать в определёном окружении) юнит-тест использовать НЕВОЗМОЖНО. По определению. Юнит-тесты проверяют только ваш код. На уровне функции/метода/класса. Они проверяют функциональность кода, действително ли он делает то что должен (действительно ли bubble_sort() отсортирует переданный список), как код реагирует на исключительные ситуации (вместо списка передали null или пустой список или слишком длинный список, получил exception при попытке считать следующий элемент из списка).
А вот дальше начинаются интеграционные тесты, деплоймент тесты и те пе.
P.S. Юнит-тестом можно проверить, например, что в коде не используется определенная функция какой-нить библиотеки, про которую известно что она приводит к проблемам. Но никак не "проверить что моя аппликуха заработает под андроид x.y".
То программы, которые при отключенном питании у вас "работают" то прочая ересь.
Похоже аналогию "не схватили", типо того, что на ересь отвечают ересью.
Ну не знаю я как я еще можно аргументировать, что в той ситуации как было юнит тест не лезет ни в какую дырку.
скорее при отключенном зарядном устройстве и выключенном экране.
-----
Я тоже когда-то считал, что Power Off есть режим Выключено.
Тем не менее таблет в этом режиме продолжает довольно активно сосать акку, если не озаботится убиванием нескольких прог.
Я не помню,
Вроде тут началось плюс еще мурка...
https://foren.germany.ru/showmessage.pl?Number=35504473&Bo...
Ты умеешь закрывать сокет к которому потерян хандле? И это... оракловский коннецтион - не обязательно позволит лазить по нему рефлектионом... ну это так, для общего сведения...
Ну в таком случае расскажи мне, каким образом ты из своего софта исправляешь ошибку с двумя IP?
Дальше есть два возможных решения:
- устранить последствия неработоспособности компонента
- устранить причину неработоспособности компонента
Ты пытаешься сделать первое, ну а меня интересует второе.
Похоже, что ты просто не понимаешь то, что я вытаюсь донести до тебя. Перефразируя старый анекдот можно сказать, что есть 10 типов людей - те, кто понимают как работают и зачем нужны юнит-тесты и те, кто это не понимают :) Ты не понимаешь.
Один из вариантов для второго - прописать в маршрутизаторе что запросы на определенный порт нужно директить не по ИП, а по МАКу...
И это делает твой софт, которой работает на клиенской машине? :) Ну-ну :)
Но это можно сделать если установлена причина сбоев и есть понимание проблемы. Если чего то из этого нет - а у тестера с твоими требованиями ничего и близко нет - остается бороться со следствиями.
Тестер такой хренью вообще заниматься не будет. Тестер не должен докапываться до причин проблемы. Задача тестера - запустить тест и убедиться, что тест "зеленый". Если тест "красный", то зарепортить баг и описать сделанные шаги, чтобы разработчик мог этот баг воспроизвести. Кстати, если баг по какой-либо причине нельзя воспроизвести, то и пофиксить его нельзя.
переход с ИП-сети на ZigBeeделается через... аналог КОМ-порта.
У тебя там еще и переход добавился? :) ZigBee никак не пересекается с IP, о каком переходе речь?
Добавь к этомуносибельность рутеров...
И умножь на рукожопость админов.
Ну, котика я отфильтровываю, а в сообщении по ссылке никаких затыканий дырок не вижу.
Узнал (из опыта) что от библиотеки Х может прилететь исключение, добавляем в код разумную обработку такого исключения и юнит-тест с моком/стабом/фейком библиотечного вызова, который бросает эксепшен, а тест проверяет что наш код его правильно обработает. Что не так?