|
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 |
|
|
start [/forum/topic.php?fid=17&fpage=3&tid=1349099]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 281ms |
total: | 461ms |
0 / 0 |