我正在使用MVC框架编写应用程序,该框架负责处理我们系统的许多样板连接。具体来说 - 应用程序是使用Parsley MVC框架用Flex编写的。但是,问题不是语言特定的。
在我的演示模型/代码隐藏/视图控制器中(无论你想要什么),我可能会有这样的事情:
[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上的attemptLogin()方法的单元测试的实用级别是什么?即:
我应该:
在其他容器/框架环境中,我倾向于不编写执行框架职责的测试,因为(恕我直言)这导致了脆弱的测试。但是,由于缺乏编译器检查,在这种情况下它可能看起来很糟糕。
思想?
答案 0 :(得分:0)
如果你考虑一下,你并没有真正测试框架的责任,就像你正在测试你的程序员打字的程度一样。
但是,如果编写该事件的同一个编码人员也编写了测试,并且如果事件名称不会经常更新,那么您可能会跳过它,因为任何拼写错误都很可能在测试时被捕获正在撰写。
答案 1 :(得分:0)
您想要测试的内容如集成测试。如果您想进行单元测试,则必须定义单位是什么。
如果你想测试你的事件,请模拟事件接收器并找出之后是否已经调用了模拟。
public class MockLoginCommand : ICommandReceiver {
public bool BeenCalled { get; set; }
[MessageHandler]
public function execute(attemptLoginEvent:AttemptLoginEvent):void {
BeenCalled=true;
}
}
等