我正在使用 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 {
在上面的两个例子中,框架会失败。在第一个示例中,它静默失败(因为元标记不正确 - 因此框架从未参与)。在第二个示例中,我们得到了一些运行时日志记录,它部分地提醒我们事情是错误的。
鉴于此,关于 MVC 框架的职责,PM 上的 tryLogin() 方法的实用级别的单元测试是什么?IE:
我是不是该:
- 测试 AttemptLoginEvent 是否由 MVC 框架管理
- 测试在分派事件时框架是否调用了 LoginCommand。
在其他容器/框架环境中,我倾向于不编写行使框架职责的测试,因为(恕我直言)这会导致脆弱的测试。但是,由于缺乏编译器检查,在这种情况下,它可能看起来是有保证的。
想法?