Navigation库使得ASP.NET Web窗体更易测试
openkk 12年前
<p> 英文原文:<a href="/misc/goto?guid=4958344998140215000">Navigation Makes ASP.NET WebForms More Testable</a></p> <p> <a href="/misc/goto?guid=4958344998969680712">Navigation</a> 是一个库,通过将 CRUD<sup>[1]</sup>逻辑从后置代码文件中分离出来,从而使得 ASP.NET Web 窗体更易测试。Graham Mendick 的文章“<a href="/misc/goto?guid=4958344999775670693">用 Navigation 进行单元测试</a>”介绍了一些相关功能、以及如何编写单元测试。</p> <p> 这个库是做什么的?它使得</p> <ul> <li>控件将被绑定到位于单独类中的控制器方法上。</li> <li>导航绑定(Navigational binding)</li> </ul> <p> 所有位于 aspx 页面的标记。例如,用于将 FormView 控件绑定到其控制器方法(controller method)的标记将如下所示——</p> <blockquote> <p><asp:FormView runat="server" DataSource DefaultMode="Edit"></p> <p><EditItemTemplate></p> <p></EditItemTemplate></p> <p></asp:FormView></p> <p><asp:ObjectDataSource runat="server" SelectMethod="GetQuestion" UpdateMethod="UpdateQuestion" TypeName="Survey.SurveyController" DataObjectTypeName="Survey.Question" /></p> </blockquote> <p> 其中<code>GetQuestion</code>和<code>UpdateQuestion</code>是在名为<code>SurveyController</code>的外部类中实现的控制器方法——它们不能直接访问控件,而是通过 Navigation 库将数据传递给它们。<code>Survey.Question</code>引用一个在本示例中使用的视图模型(ViewModel)来传输数据。</p> <p> 为何说它可以简化单元测试?因为现在,业务逻辑位于单独的、无任何 web 特定行为的 POCO<sup>[2]</sup>类中。所以说它使得测试变得更容易。更多详细信息请参阅<a href="/misc/goto?guid=4958344999775670693">此文</a>。</p> <p> 尽管我们已在 InfoQ 上提到过,WebForms 4.5 获得 model binders(模型联编程序)开箱即用(out-of-the-box)——然而这个库允许将控制器方法放置到单独的类中,从而取代后置代码文件,这对于可测试性和可重用性似乎更好。如果您有兴趣,可以下载 <a href="/misc/goto?guid=4958345001325191360">Navigation NerdDinner 演练代码</a>。</p> <p> <strong>译注</strong></p> <p> [1] <strong>CRUD</strong>,即 Create, Read, Update, Delete 的首字母缩写,指数据库操作中的创建、读取、更新、删除。</p> <p> [2] <strong>POCO</strong>,即 Plain Old CLR Object 的缩写,简单传统 CLR(公共语言运行库)对象,更多详细信息请参阅<a href="/misc/goto?guid=4958194102712997197" target="_blank">维基百科</a>。<br /> 来自: <a id="link_source2" href="/misc/goto?guid=4958345002870205507" target="_blank">InfoQ</a></p>