Для того, щоб знайти правильну групу для контролерів, продумайте тестування .
(Навіть якщо ви насправді не проводите тестування, думка про те, як би ви йшли на тестування своїх контролерів, дасть вам дуже гарну думку про те, як їх структурувати.)
AuthenticationController
Чи не перевіряються сам по собі, тому що він містить тільки функціональні можливості для входу в систему і виходу з системи , але ваш код тестування потрібно буде якимось - то чином створити підроблені облікові записи для цілей тестування , перш ніж він може перевірити успішну реєстрацію. Ви можете обійти підтесту підтесту та перейти безпосередньо до своєї моделі для створення тестових облікових записів, але тоді у вас буде крихкий тест: якщо модель зміниться, вам доведеться змінювати не тільки код, які тести модель, а також код, який тестує контролер, навіть якщо інтерфейс та поведінка контролера залишилися незмінними. Це нерозумно.
A LoginController
непридатний з тих же причин: ви не можете перевірити його без створення облікових записів спочатку, і ще більше речей, які ви не можете перевірити, як-от, наприклад, запобігання повторюваних входів, але потім дозволяєте користувачеві входити після виходу з системи. (Оскільки цей контролер не має функцій виходу.)
AccountController
Дасть вам все , що потрібно для того , щоб зробити ваше тестування: ви можете створити тестовий аккаунт , а потім спробувати авторизації, Ви можете видалити обліковий запис , а потім переконайтеся , що ви не можете Ввійти більше, ви можете змінити пароль і переконайтеся , що для входу в систему потрібно використовувати правильний пароль.
На закінчення: щоб написати навіть найменший тестовий набір, вам потрібно буде забезпечити AccountController
доступність усієї функціональності . Підрозділення його на менші контролери, здається, дає неповносправні контролери з недостатньою функціональністю для належного тесту. Це дуже хороший показник того, що функціональність AccountController
є найменшим підрозділом, який має сенс.
І взагалі кажучи, підхід "подумай про тестування" працюватиме не тільки в цьому конкретному сценарії, але і в будь-якому подібному сценарії, який ти зустрінеш у майбутньому.