Я пишу приложение, используя структуру MVC, которая заботится о большом количестве стандартных проводов нашей системы. В частности, приложение написано на Flex с использованием фреймворка Parsley MVC. Однако вопрос не зависит от языка.
В моей Presentation Model/Code-Behind/View-Controller (как бы вы это ни называли) у меня может быть что-то вроде этого:
[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvents["attemptLogin"]
public class LoginViewPM {
public function attemptLogin(username:String,password:String):void
{
dispatchEvent(new AttemptLoginEvent(username,password));
}
}
Тогда в другом месте моей системы код, отвечающий на это, будет выглядеть так:
public class LoginCommand {
[MessageHandler]
public function execute(attemptLoginEvent:AttemptLoginEvent):void {
// Do login related stuff
}
}
Важно отметить, что во Flex/Actionscript метатеги не проверяются компилятором. Например:
[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvent["attemptLogin"] // Spelling mistake - metatag is ManagedEvents
public class LoginViewPM {
а также
[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvent["attemtLogin"] // Spelling mistake - event name is wrong
public class LoginViewPM {
В приведенных выше двух примерах фреймворк потерпит неудачу. В первом примере он молча терпит неудачу (потому что метатег неверен, поэтому фреймворк никогда не задействуется). Во втором примере мы получаем некоторый журнал времени выполнения, который частично предупреждает нас о том, что что-то не так.
Учитывая это, каков прагматичный уровень модульного тестирования для метода tryLogin() в PM по отношению к обязанностям среды MVC? То есть:
Нужно ли мне:
- Проверьте, что AttemptLoginEvent управляется инфраструктурой MVC.
- Проверьте, что LoginCommand вызывается платформой при отправке события.
В других средах контейнеров/фреймворков я стараюсь не писать тесты, выполняющие обязанности фреймворков, поскольку (ИМХО) это приводит к хрупким тестам. Однако, учитывая отсутствие проверки компилятора, в данном случае это может показаться необоснованным.
Мысли?