|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
Всем доброго дня.Пытаюсь понять Ioc и не могу понять момент с Unit тестированием. Т.е в чём разница что метод упадёт при вызове у детали или у абстракции. Или плюс в том что мы можем тестировать метод любой реализации? Заранее благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 12:32 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
Junior1997, у абстракции интересует факт самого вызова и данные, которые переданы если абстракция возвращает данные, то тестируется правильная обработка полученных данных ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 13:45 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
Junior1997Всем доброго дня.Пытаюсь понять Ioc и не могу понять момент с Unit тестированием. Т.е в чём разница что метод упадёт при вызове у детали или у абстракции. Или плюс в том что мы можем тестировать метод любой реализации? Заранее благодарен тестируешь ты всегда конкретную реализацию, конкретный код интерфейсы тебе помогают в интересующий тебя класс подсунуть тестовую имплементацию. чтобы протестить изолированно от БД, http-вызовов, другого когда, которй что-то делает Ioc тут вобщем-то не причем ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 21:50 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttJunior1997, у абстракции интересует факт самого вызова и данные, которые переданы если абстракция возвращает данные, то тестируется правильная обработка полученных данных Тестирвать интефейсы - оверхед ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 21:59 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttJunior1997, у абстракции интересует факт самого вызова и данные, которые переданы если абстракция возвращает данные, то тестируется правильная обработка полученных данных поясни ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 22:03 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachТестирвать интефейсы - оверхед Серьёзно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если мы покрываем тестами класс MySuperService, мы должны убедиться, что метод DoSomething вызовет метод Send у IMailService, и вызовет правильно. Если что-то возвращается из сервиса, то проверить, что данные правильно интерпретированы. Какой ещё оверхед? Чего вы там городите? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 11:54 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttlove_bachТестирвать интефейсы - оверхед Серьёзно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если мы покрываем тестами класс MySuperService, мы должны убедиться, что метод DoSomething вызовет метод Send у IMailService, и вызовет правильно. Если что-то возвращается из сервиса, то проверить, что данные правильно интерпретированы. Какой ещё оверхед? Чего вы там городите? ))) Ok, не понял твой ответ сначала, а удалить сообщение уже нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2019, 20:55 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachТестирвать интефейсы - оверхед WTF "тестировать интерфейсы"? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2019, 22:48 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthatlove_bachТестирвать интефейсы - оверхед WTF "тестировать интерфейсы"? Почему нет-то? Особенно с учётом, что у интерфейсов теперь появились дефолтные методы ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 01:19 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttПочему нет-то? Особенно с учётом, что у интерфейсов теперь появились дефолтные методы По мне так от дефолтных методов каким-то злом попахивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 07:20 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthathVosttПочему нет-то? Особенно с учётом, что у интерфейсов теперь появились дефолтные методы По мне так от дефолтных методов каким-то злом попахивает. да, теперь уже и не скажешь, что интерфейсы отличаются от классов наличием реализации у последних ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2019, 13:36 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachhVosttпропущено... Серьёзно? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если мы покрываем тестами класс MySuperService, мы должны убедиться, что метод DoSomething вызовет метод Send у IMailService, и вызовет правильно. Если что-то возвращается из сервиса, то проверить, что данные правильно интерпретированы. Какой ещё оверхед? Чего вы там городите? ))) Ok, не понял твой ответ сначала, а удалить сообщение уже нельзя ну, это конечно не называется "тестирование интерфейсов" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 19:57 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachну, это конечно не называется "тестирование интерфейсов" интерфейсы это что? это контракт. тестирование правильного использования контракта в данном случае чем является? тестирование интерфейса. сам по себе интерфейс, конечно, не тестируется, а его конкретное использование в рамках тестирования конкретной реализации. но. это ещё не всё. к примеру, у вас на проекте может быть принято соглашение, например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости. единственный способ гарантировать, что никто не забыл указать атрибут, это протестировать все интерфейсы на предмет наличия правильных атрибутов. без всякой реализации. и это ещё не всё. сам интерфейс может быть протестирован как набор кейсов, покрывая все инварианты использования конкретного экземпляра интерфейса, независимых от реализации. это и есть тестирование интерфейса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2019, 23:24 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVostt к примеру, у вас на проекте может быть принято соглашение, например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости. Это что же получается то? Модули верхнего уровня зависят от модулей нижнего уровня, абстракции зависят от деталей. Вах-вах! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 17:59 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttтестирование правильного использования контракта в данном случае чем является? тестирование интерфейса. тестирование правильного использования контракта это тестирование потребителя этого контракта. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 20:41 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
ЕвгенийВhVosttк примеру, у вас на проекте может быть принято соглашение, например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости. Это что же получается то? Модули верхнего уровня зависят от модулей нижнего уровня, абстракции зависят от деталей. Вах-вах! в каком месте-то? ) fkthatтестирование правильного использования контракта это тестирование потребителя этого контракта. код теста имитирует потребителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 01:34 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttкод теста имитирует потребителя. Ты чота путаешь. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Человеческим языком это можно было бы озвучить так: "При условии, что реализация "IReader.ReadData" вернет данные "testData", метод "ObjectUnderTheTest.ReadAndWrite" должен вызвать метод "IWriter.WriteData" с этими данными." Где тут имитация? Тестируется именно concrete method ReadAndWrite класса ObjectUnderTheTest. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 17:43 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthatЧеловеческим языком это можно было бы озвучить так: "При условии, что реализация "IReader.ReadData" вернет данные "testData", метод "ObjectUnderTheTest.ReadAndWrite" должен вызвать метод "IWriter.WriteData" с этими данными." Где тут имитация? Тестируется именно concrete method ReadAndWrite класса ObjectUnderTheTest. контракты тоже можно тестировать :) на предмет полноты и достижимости. плюс, гарантия, что контракт не изменится, а если изменится, то как это повлияет на сценарии использования. например: Код: c# 1. 2. 3.
тест Код: c# 1. 2.
интересует декларативное выполнение контракта, а не реализация. виден сценарий использования контракта. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 18:17 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVostt Код: c# 1. 2.
Ну и "Sum" вернет просто "0". В чем тут тест-то? В том что у "ICalc" просто есть метод "Sum" с двумя параметрами, что ли? Так это и так ясно, если код собирается - не адов JS все-таки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 19:34 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVostt, Была, впрочем, в докоревские времена такая фреймворка, как "Microsoft Code Contracts" (R.I.P.) и она действительно позволяла описать контракты интерфейса отдельно от его реализации и даже протестировать их не имея реализации вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 19:45 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthathVostt, Была, впрочем, в докоревские времена такая фреймворка, как "Microsoft Code Contracts" (R.I.P.) и она действительно позволяла описать контракты интерфейса отдельно от его реализации и даже протестировать их не имея реализации вообще. хвост так-то правильно говорит, но считает, что его термины/стиль общения общеупотребимы. "тестирование интерфейсов" - да все уже поняли, о чем тут ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 10:29 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthathVosttтестирование правильного использования контракта в данном случае чем является? тестирование интерфейса. тестирование правильного использования контракта это тестирование потребителя этого контракта. да, но вроде про это и речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 10:34 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttlove_bachну, это конечно не называется "тестирование интерфейсов" интерфейсы это что? это контракт. тестирование правильного использования контракта в данном случае чем является? тестирование интерфейса. сам по себе интерфейс, конечно, не тестируется, а его конкретное использование в рамках тестирования конкретной реализации. но. это ещё не всё. к примеру, у вас на проекте может быть принято соглашение, например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости. единственный способ гарантировать, что никто не забыл указать атрибут, это протестировать все интерфейсы на предмет наличия правильных атрибутов. без всякой реализации. и это ещё не всё. сам интерфейс может быть протестирован как набор кейсов, покрывая все инварианты использования конкретного экземпляра интерфейса, независимых от реализации. это и есть тестирование интерфейса. местами ты загоняешься: "например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости" - хер ты это протестишь, похожий топик а Java есть "для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости" тут какой-то проеб в архитектуре "единственный способ гарантировать, что никто не забыл указать атрибут, это протестировать все интерфейсы на предмет наличия правильных атрибутов. без всякой реализации" как, рефлексией? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 10:41 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachhVosttк примеру, у вас на проекте может быть принято соглашение, например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости Ну, тут он чота вообще прогнал. Интерфейс вообще не должен нихера знать про свои реализации и все, конец сказке. Кстати, как они с таким соглашением будут выкручиваться, если у них интерфейс и реализация в разных сборках. А если захочется выпилить вообще нах текущюю реализацию и сделать новую, то придется лезть в интерфейс и менять аттрибут. Регистрация "by conventions" это очень даже упортребляемая вещь, но делается она совсем не так, да и вообще все норм. контейнеры её и так из коробки поддерживают, без всяких половых фантазий с аттрибутами. Код: c# 1. 2. 3.
Вообще, на мой вкус и цвет любая сборка с интерфейсами, классами и т.п. должна быть "container-agnostic", т.е. вообще ничего не знать про то, что её будут через IoC дергать, не говоря уже о том, чтобы как-то зависеть от конкретного контейнера. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 14:29 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttсам интерфейс может быть протестирован как набор кейсов, покрывая все инварианты использования конкретного экземпляра интерфейса, независимых от реализации. это и есть тестирование интерфейса. "Посмотри, что за х...ню ты написал" (с) Ты, вроде бы, умный человек, но периодически начинаешь впадать в какую-то ересь. Соблюдение инвариантов и постусловий - это ответственность кнкретной реализации контракта - без неё ты никак это не протестируешь. Можно, в принципе, протестировать, что потребитель сервиса всегда соблюдает предусловия, но это опять-таки будет тест кода потребителя сервиса, а не кода интерфейса. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 15:03 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthathVostt Код: c# 1. 2.
Ну и "Sum" вернет просто "0". В чем тут тест-то? В том что у "ICalc" просто есть метод "Sum" с двумя параметрами, что ли? Так это и так ясно, если код собирается - не адов JS все-таки. не вернёт он тут 0. и параметров там два, а не один. собственно в этом и состоит тест. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:32 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachместами ты загоняешься: "например, для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости" - хер ты это протестишь, похожий топик а Java есть что значит хер протестишь? мы давно покрывает тестами на наличие тех или иных атрибутов и правильного их употребления. love_bach"для каждого сервисного интерфейса должен быть указан в атрибутах тип реализации, для автоматической регистрации зависимости" тут какой-то проеб в архитектуре никакого проёба в архитектуре нет. это нормальное решение, не противоречащее ни одному из принципов. love_bach"единственный способ гарантировать, что никто не забыл указать атрибут, это протестировать все интерфейсы на предмет наличия правильных атрибутов. без всякой реализации" как, рефлексией? нет, блин, волшебным заклинанием ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:35 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthatНу, тут он чота вообще прогнал. Интерфейс вообще не должен нихера знать про свои реализации и все, конец сказке. Откуда взято это утверждения? Вы наверное путаете с принципом инверсии зависимостей. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Наличие атрибута реализации у интерфейса никак не противоречит. В любом случае, вам где-то нужно зарегистрировать реализацию. Знание всё равно будет где-то размещено. Какая разница где? При чём вы можете переопределить реализацию, указанную через атрибут. Всё по феншую. fkthatКстати, как они с таким соглашением будут выкручиваться, если у них интерфейс и реализация в разных сборках. А если захочется выпилить вообще нах текущюю реализацию и сделать новую, то придется лезть в интерфейс и менять аттрибут. Без проблем, во-первых такое решение не всегда нужно использовать, с атрибутом. Во-вторых, вы всегда можете переопределить реализацию при регистрации, если вам это нужно. В третьих, это не мешает реализации оставаться инкапсулированой -- т.е. так и должно быть. fkthatРегистрация "by conventions" это очень даже упортребляемая вещь, но делается она совсем не так, да и вообще все норм. контейнеры её и так из коробки поддерживают, без всяких половых фантазий с аттрибутами. Конвенции это как раз одно из решений на атрибутах. Т.е. вы себе уже противоречите :) fkthat Код: c# 1. 2. 3.
Вообще, на мой вкус и цвет любая сборка с интерфейсами, классами и т.п. должна быть "container-agnostic", т.е. вообще ничего не знать про то, что её будут через IoC дергать, не говоря уже о том, чтобы как-то зависеть от конкретного контейнера. В условии Where может быть проверка атрибута. Что не меняет никак ни смысла, ни содержания. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:41 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthat"Посмотри, что за х...ню ты написал" (с) Ты, вроде бы, умный человек, но периодически начинаешь впадать в какую-то ересь. Соблюдение инвариантов и постусловий - это ответственность кнкретной реализации контракта - без неё ты никак это не протестируешь. Можно, в принципе, протестировать, что потребитель сервиса всегда соблюдает предусловия, но это опять-таки будет тест кода потребителя сервиса, а не кода интерфейса. Если по-вашему, контракт нельзя протестировать без реализации, то пусть так и остаётся для вас. Я могу протестировать, при необходимости, и понимаю зачем это нужно. Вы пока нет. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2019, 17:42 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
hVosttfkthat"Посмотри, что за х...ню ты написал" (с) Ты, вроде бы, умный человек, но периодически начинаешь впадать в какую-то ересь. Соблюдение инвариантов и постусловий - это ответственность кнкретной реализации контракта - без неё ты никак это не протестируешь. Можно, в принципе, протестировать, что потребитель сервиса всегда соблюдает предусловия, но это опять-таки будет тест кода потребителя сервиса, а не кода интерфейса. Если по-вашему, контракт нельзя протестировать без реализации, то пусть так и остаётся для вас. Я могу протестировать, при необходимости, и понимаю зачем это нужно. Вы пока нет. :) я тоже не понимаю. если честно. "Я могу протестировать..." - что протестировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2019, 16:32 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
love_bachя тоже не понимаю. если честно. "Я могу протестировать..." - что протестировать? Тут, в принципе, уже все это обсосали. Протестировать можно то, что клиент, использующий этот контракт соблюдает правила его использования, например, как самый банальный вариант, не передаёт в его метод null там где это нельзя сделать. "Тестировать контракт" тут как-то просто не очень удачное выражение, лучше "тестировать соблюдение контракта его клиентами". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2019, 17:31 |
|
Ioc и Unittest
|
|||
---|---|---|---|
#18+
fkthatТут, в принципе, уже все это обсосали. Протестировать можно то, что клиент, использующий этот контракт соблюдает правила его использования, например, как самый банальный вариант, не передаёт в его метод null там где это нельзя сделать. "Тестировать контракт" тут как-то просто не очень удачное выражение, лучше "тестировать соблюдение контракта его клиентами". Можно и так сформулировать, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2019, 00:19 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1349099]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 236ms |
total: | 366ms |
0 / 0 |