Unit testing ASP.NET MVC 3的测试驱动开发-解析XML源文件
Hi希望与社区接触,以获得见解和建议 关于我正在进行的工作的测试驱动开发方法 我正在从事一个ASP.NET MVC3项目,该项目在包含图表和表格数据的物理XML文件中进行解析。 首先,应用程序生成xml节点的模型表示。 控制器用于执行应用逻辑, 最终呈现到带有图表和表格的特定HTML视图 我在想,我将构建一个模型来表示xml ie类,如dataset、header、dimension等 适当的接口。这是正确的方法吗。请参见下面的示例xml 我将编写什么样的单元测试? 我会从访问物理XML文件的单元测试开始吗? 我应该将xml字符串的片段流到Xdocument中吗?这不是teting.net代码吗? 假设我不想创建具体的XDocument类,那么如何模拟对象 我想做的第一个测试是加载xml并测试结束日期是否正确 我有一个XMLHelper类,它加载xml并返回带有属性end date的头的类表示 因此,我的具体代码大致如下Unit testing ASP.NET MVC 3的测试驱动开发-解析XML源文件,unit-testing,asp.net-mvc-3,tdd,testdriven.net,Unit Testing,Asp.net Mvc 3,Tdd,Testdriven.net,Hi希望与社区接触,以获得见解和建议 关于我正在进行的工作的测试驱动开发方法 我正在从事一个ASP.NET MVC3项目,该项目在包含图表和表格数据的物理XML文件中进行解析。 首先,应用程序生成xml节点的模型表示。 控制器用于执行应用逻辑, 最终呈现到带有图表和表格的特定HTML视图 我在想,我将构建一个模型来表示xml ie类,如dataset、header、dimension等 适当的接口。这是正确的方法吗。请参见下面的示例xml 我将编写什么样的单元测试? 我会从访问物理XML文件的单
var dataset = XmlHelper.Load(filePathOrXmlStream);
var header=dataset.Header;
Assert.AreEqual("5/06/2011",header.EndDate);
假设以下XML用于流或文件加载
XML源
我会先做最重要的测试:
Given model representation of xml,
when user asks html output,
controller should produce correct view with chart/table.
通过这个测试也会让你考虑整体设计。在那之后,它将被分支和绑定。我认为你正确地处理了这个问题。在您的流程中实际上有两个单独的步骤: 1将XML文档转换为类表示,即模型 2将模型渲染到视图 TDD工作正常的部分是步骤2,因为您正在处理对象。然后,你可以沿着Shin Taesung所描绘的道路走。如果需要的话,您可以定义对象的接口,并拥有一个IChartModel,比如说,一个StartDate属性,然后可以对其进行模拟,将StartDate设置为您想要的任何值,并编写关于视图在这种情况下应该为真的断言。正如Taesung所说,这将帮助您推动您的设计 TDD不能正常工作的部分在步骤1中。当您完全可以在内存中工作时,单元测试就会大放异彩,根据定义,磁盘上的文件在这种环境下不能很好地工作。如果您认为值得这样做,那么我会做的是创建示例文件,并针对这些文件测试您的XmlReader,以确保您正在阅读您应该阅读的内容,并正确填充步骤2的输入。这些不是适当的单元测试,而是更多的集成测试。我倾向于创建一个愉快的文件,具有适当的输入,并且可能为潜在的错误案例创建文件。随着时间的推移,当您遇到bug时,您可以开始添加新文件。不过,编写这些测试并不有趣
如果你要在你的应用程序中创建那个XML文件,你可以考虑在测试中创建这些文件并将它们读回,这可能会给你更多的代码控制,而不是随着时间的推移,如果你的设计进化,就必须保持固定文件。p> 在我看来,将此分离的最大好处是,通过将数据在MVC应用程序中的结构和使用方式与从XML文件中获取数据的方式分离,可以在两个不同的层中分离,如果您决定从SQL中提取数据,或者随着时间的推移更改XML文件的结构,您将在数据访问和数据利用之间实现可靠的解耦。您将拥有一个域模型,即图表应该是什么,然后可以将各种数据源插入其中
Given model representation of xml,
when user asks html output,
controller should produce correct view with chart/table.