我使用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文件不需要包含实体的所有属性:只需要指定测试中使用的那些实体属性。
相关问题
以下是有关如何填充测试数据的相关问题。大多数引用的库似乎都已过时,我找不到对xml导入测试数据的支持: Is there any framework for .NET to populate test data?
答案 0 :(得分:0)
您可以使用XmlSerializer
并序列化您的实体,以便以后进行去血清化吗?
https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx
答案 1 :(得分:0)
我找到了Effort - 实体框架单元测试工具,它似乎不支持xml,但至少允许读取csv数据来填充内存测试数据库:
答案 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#)安装到您的项目中。