Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing ASP.NET MVC 3的测试驱动开发-解析XML源文件_Unit Testing_Asp.net Mvc 3_Tdd_Testdriven.net - Fatal编程技术网

Unit testing ASP.NET MVC 3的测试驱动开发-解析XML源文件

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文件的单

Hi希望与社区接触,以获得见解和建议 关于我正在进行的工作的测试驱动开发方法

我正在从事一个ASP.NET MVC3项目,该项目在包含图表和表格数据的物理XML文件中进行解析。 首先,应用程序生成xml节点的模型表示。 控制器用于执行应用逻辑, 最终呈现到带有图表和表格的特定HTML视图

我在想,我将构建一个模型来表示xml ie类,如dataset、header、dimension等 适当的接口。这是正确的方法吗。请参见下面的示例xml

我将编写什么样的单元测试? 我会从访问物理XML文件的单元测试开始吗? 我应该将xml字符串的片段流到Xdocument中吗?这不是teting.net代码吗? 假设我不想创建具体的XDocument类,那么如何模拟对象

我想做的第一个测试是加载xml并测试结束日期是否正确

我有一个XMLHelper类,它加载xml并返回带有属性end date的头的类表示

因此,我的具体代码大致如下

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.