Denken Sie an die Tests , um die richtige Gruppierung für Controller zu finden .
(Selbst wenn Sie keine Tests durchführen, erhalten Sie einige sehr gute Einblicke in die Strukturierung Ihrer Controller, wenn Sie darüber nachdenken, wie Sie Ihre Controller testen würden.)
An kann AuthenticationController
nicht selbst getestet werden, da es nur Funktionen zum An- und Abmelden enthält. Ihr Testcode muss jedoch zu Testzwecken gefälschte Konten erstellen, bevor eine erfolgreiche Anmeldung getestet werden kann. Sie könnten das zu testende Subsystem umgehen und direkt zu Ihrem Modell gehen, um die Testkonten zu erstellen. Dann haben Sie jedoch einen fragilen Test in der Hand: Wenn sich das Modell ändert, müssen Sie nicht nur den Code ändern, der testet das Modell, aber auch Code, der den Controller testet, obwohl die Schnittstelle und das Verhalten des Controllers unverändert geblieben sind. Das ist unvernünftig.
A LoginController
ist aus den gleichen Gründen ungeeignet: Sie können es nicht testen, ohne zuerst Konten zu erstellen, und es gibt noch weitere Dinge, die Sie nicht testen können, z. B. das Verhindern doppelter Anmeldungen, aber das Anmelden eines Benutzers nach dem Abmelden. (Da dieser Controller keine Abmeldefunktion hat.)
An AccountController
gibt Ihnen alles, was Sie für Ihre Tests benötigen: Sie können ein Testkonto erstellen und dann versuchen, sich anzumelden. Sie können das Konto löschen und dann sicherstellen, dass Sie sich nicht mehr anmelden können. Sie können das Passwort ändern und sicherstellen, dass das Für die Anmeldung usw. muss das richtige Passwort verwendet werden.
Fazit: Um auch die kleinste Testsuite zu schreiben, müssen Sie alle Funktionen der AccountController
verfügbaren Suite zur Verfügung stellen. Die Unterteilung in kleinere Steuerungen scheint zu behinderten Steuerungen mit unzureichender Funktionalität für einen ordnungsgemäßen Test zu führen. Dies ist ein sehr guter Hinweis darauf, dass die Funktionalität von AccountController
die kleinste sinnvolle Unterteilung ist.
Und im Allgemeinen funktioniert der Ansatz "Denken Sie an das Testen" nicht nur in diesem speziellen Szenario, sondern in jedem ähnlichen Szenario, auf das Sie in Zukunft stoßen.