julia_v_iluhina

Untitled

Jan 11th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.74 KB | None | 0 0
  1. Где инициализировать пейджи - в предке тест-класса или в самом тест-классе
  2. Всім привіт.
  3. стосовно зауваження по ініціалізації пейджи в базовому тест класі https://www.refheap.com/120326
  4. "Соображения -
  5. даже в рамках тестов одного приложения не факт, что в разных тест-классах понадобидся одна и та же пейджа
  6. не хочется портить универсального предка для тест-класса
  7. хочется быть более KISS - чтобы не приходилось из тест-класса искать - что за пейджа у нас "
  8.  
  9. Я залишусь при свої думці. В захист своєї позиції, що досить зручно коли ініціалізація всіх пейджів знаходиться в одному класі. А те що з тестового класу не видно що саме за пейджа, то у випадку комплексного веб додатку це вирішується лаконічними назвами змінних в парент тест-класі і звикається до цього досить швидко.
  10.  
  11. yashaka [10:26 PM]
  12. ти порушуєш деякі принципи
  13. наприклад:
  14. Single Responsibility Principle
  15.  
  16. твій бейс клас починає відповідати і за пейджі…
  17. хоча перед цим він відповідав за інше…
  18. А тепер він вже став “контейнером пейджів" (edited)
  19. більше того, ім’я твого класу нічого не каже про те що він є контейнером пейджів
  20. такий код - є магічним - тому що приховує важливу інформацію
  21. те що до цього можна звикнути - бо запам’ятати - це погана практика…
  22. бо колись твоя пам’ять зламається, якщо ти будеш забагато магії тримати в голові
  23. тести мають бути очевидними - це основне правило…
  24. і це значить що все що стосується тест логіки - має бути в тесті, навіть якщо воно дублюється
  25. тут KISS важливіше за DRY
  26. якщо тобі так сильно хочеться тримати всі пейджі в одному місці - то для цього варто створити окремо клас - контейнер пейджів
  27. назвати наприклад його App
  28. і вже через нього мати доступ до цих пейджів…
  29. можливо у вигляді статичних просто змінних
  30. щоб писати App.todoMVCPage
  31. ну чи просто
  32. App.page
  33. оскільки у нас інших пейджів немає…
  34. так що ти звісно можеш робити як завгодно, але при такому рішенні ти отримаєш не done а accepted :slightly_smiling_face:
  35. бо ми таки не згодні з таким варіантом :slightly_smiling_face:
  36. якщо хочеш “зручності”
  37. то або створи окремо контейнер пейджів
  38. або забери з бейс теста пейджу і запхни в базовий тест клас з відповідним іменем
  39. типу AtTodoMVCPageTest
  40. щоб було зрозуміло за що цей клас відповідає (edited)
  41.  
  42. але можеш ще нас переконати :slightly_smiling_face: якщо знайдеш аргументи :slightly_smiling_face:
  43.  
  44. > А те що з тестового класу не видно що саме за пейджа, то у випадку комплексного веб додатку це вирішується лаконічними назвами змінних в парент тест-класі
  45. не зрозумів чому “лаконічні назви” допомагають “видимості” :slightly_smiling_face:
  46. проблема все одно є, і “я все запам’ятаю бо назви лаконічні і у мене хороша пам’ять” - це якийсь заслабкий аргумент
  47. не у всіх хороша пам’ять… плюс тести сапортяться часто тими хто їх не писав, наприклад програмістами - їх теж ти змусиш запам’ятати все що живе в базовому класі?
  48.  
  49. > що досить зручно коли ініціалізація всіх пейджів знаходиться в одному класі
  50. “досить зручно” це не аргумент
  51. аргументом було б щось типу “це зручно тому що… “
  52. ну і знову ж таки… вище я писав - що "одне місце” можна реалізувати і іншим способом, більш “безпечним” і простим, не вимагаючим великих затра пам’яті всієї команди
  53.  
  54. julia.v.iluhina [10:38 PM]
  55. Привет)
  56. я кстати - так и не поняла - какие плюсы ты получаешь при таком подходе
  57. что в этом такого лучшего или более удобного?
  58.  
  59. yashaka [10:40 PM]
  60. з приводу зручності - він хоче сказати що є “одна точка доступу” до всіх вже наперед ініціалізованих пейджів…
  61. але знову ж таки… сумнівна зручність тримати їх в базовому классі…
  62. мати до них доступ через окремий обьект контейнер типу App
  63. чи Pages
  64. імхо набагато зручніше тому що це явно
  65. і через крапочку можна отримати доступ тільки до пейджів, а не до ще чогось, що може жити в тому ж базовому класі
  66. при цьому хоча такий варіант з контейнером - я б прийняв як для done
  67. я все одно не вважаю це добрим рішенням
  68. бо імхо явно в тесті показати з якими пейджами іде робота - набагато більш очевидніше і інформативніше ніж в кожен тест “передавати всю пачку пейджів"
  69.  
  70. julia.v.iluhina [10:41 PM]
  71. т е мы заранее считаем - что нам в любых тест-классах нужен одинаковый набор пейджей?
  72.  
  73. yashaka [10:42 PM]
  74. ну… ми не вважаємо - але це так, є мінусом цього рішення :slightly_smiling_face:
  75. що ми трохи “запудрюємо мозги” надлишковою інформацією :slightly_smiling_face:
  76. це як таскати з собою повний мішок інструментів “на всі випадки життя” :slightly_smiling_face:
  77. хоча можна було б передбачити що сьогодні тобі знадобиться тільки те то і те то
  78.  
  79. student [10:45 PM]
  80. Ну єдина точка доступу App у мене на проекті використовується)
  81.  
  82. yashaka [10:46 PM]
  83. ну я радий за твій проект, але не за твоє рішення домашки :slightly_smiling_face:
  84. тому що у ньому поки що не так )
  85. і доречі… поки у нас всього одна пейджа…
  86. що означає - що нам App - якби трохи зайвий :slightly_smiling_face:
  87.  
  88. student [10:48 PM]
  89. тільки хотів це писати)
  90. хех
  91.  
  92. yashaka [10:48 PM]
  93. і можна вважати що сам TodoMVC - і є єдиною точкою входу)
  94. таке… враховуючи що це “єдина точка входу і так” - то можна в принципі і винести її кудись в базовий тест клас…
  95. але все одно - треба створити його окремо, з гарним іменем типу AtTodoMVCPage
  96. вже й плюс заодно і винести туди прекондішен відкриття сторінкиі очистки даних…
  97. але знову ж таки… як на мене - все це трохи занадто складно як для тестів для еплікейшена тільки з одною сторінкою…
  98. таке...
  99.  
  100. student [10:52 PM]
  101. Тоді якщо пейджа одна, чому її інітити в різних класах?
  102. При переході до більш складного рішення і в у випадку жорского розділення логіки(в одних тестах зазвичай одні пейджі), то було б здається норм.
  103. Прекондішини вже використовуються з хелпера, того виходить городити окремий клас в ієрархії наслідування заради пейджи тільки....
  104.  
  105. yashaka [10:53 PM]
  106. > Тоді якщо пейджа одна, чому її інітити в різних класах?
  107. тому що це ООП
  108. а в ньому нормально все інітити скрізь де потрібно заюзати
  109. якби це було модульне програмування - то там не треба нічого інітити
  110.  
  111. > Прекондішини вже використовуються з хелпера, того виходить городити окремий клас в ієрархії наслідування заради пейджи тільки....
  112. ну так… правильно мислиш…
  113. ієрархіх наслідування - це складно, це не КІСС
  114. але точно така сама логіка з вбудовою пейджі в BaseTest
  115. ти теж ускладнюєш ієрархію наслідування - тим що “роздуваєш” один з класів в цій ієрархії, при цьому порушуючи SRP
  116. таке… тут звісно можна довго сперечатися...
Advertisement
Add Comment
Please, Sign In to add comment