如何从xml或csv文件中读取C#测试的分层测试数据?

时间:2015-12-10 16:06:58

标签: c# xml entity-framework test-data

我使用Microsoft Entity Framework并拥有一些嵌套实体

GrandParent,Parent,Child

在C#测试中,我希望能够读取一个GrandParents数组,包括来自xml文件的后代,例如: (假代码示例:)

[TestMethod]
[DataSource("myTestData.xml")] 
public void MyTest(){
       List<GrandParent> grandParents = TestContext.GetEntityList(GrandParent.class);
}
<?xml version="1.0" encoding="utf-8" ?>
<TestData>
<GrandParent>
  <name>GrandParent_1</name>
  <Parent>
    <name>Parent_1.1</name>
    <Child>
      <name>Child_1.1.1</name>         
    </Child>
  </Parent>
</GrandParent>

<GrandParent>
  <name>GrandParent_2</name>
  <Parent>
    <name>Parent_2.1</name>
    <Child>
      <name>Child_2.1.1</name>         
    </Child>
  </Parent>
  <Parent>
    <name>Parent_2.2</name>
    <Child>
      <name>Child_2.2.1</name>         
    </Child>
  </Parent>
</GrandParent>
<TestData>

DataSource注释不支持上述语法,我只能找到从DataSource读取平面数据的示例。 https://msdn.microsoft.com/en-us/library/ms182527.aspx

似乎不支持读取分层数据并将该数据转换为实体对象树。

是否有一种简单的方法可以从xml DataSource创建实体对象树以进行测试?也许像Java中的Unitils(http://unitils.org/tutorial-database.html),但对于.Net?理想情况下,xml文件不需要包含实体的所有属性:只需要指定测试中使用的那些实体属性。

相关问题

3 个答案:

答案 0 :(得分:0)

您可以使用XmlSerializer并序列化您的实体,以便以后进行去血清化吗?

https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

答案 1 :(得分:0)

我找到了Effort - 实体框架单元测试工具,它似乎不支持xml,但至少允许读取csv数据来填充内存测试数据库:

https://effort.codeplex.com/wikipage?title=Startup%20data%20from%20CSV%20files&referringTitle=Tutorials

答案 2 :(得分:0)

你提到CSV是一个可能的选项,所以我会提到我创建了一个T4模板,它读取CSV文件并生成数据列表,主要用于单元测试。 您必须自己处理对象层次结构,因此这可能不适合您的需要。但是......你可以进行这样的测试(仅填充一级后代用于说明):

<?php

该列表将从CSV文件生成(评论也可以),例如:

// change the pathname to your target file which you want to remove the BOM

在测试执行期间未读取CSV文件。 T4模板在设计时创建StaticDataLibrary,这是为了避免在测试执行期间访问文件系统。

我创建了一个NuGet package,如果您有兴趣,可以将模板(VB或C#)安装到您的项目中。