C# 为测试创建对象层次结构
我正在构建一个测试驱动的应用程序,将平面文件排序为父子层次结构。现在我想为我自己的排序创建一个非常通用的测试。为此,我想生成一些测试数据,然后进行排序 将被排序的对象将如下所示:C# 为测试创建对象层次结构,c#,unit-testing,hierarchical-data,C#,Unit Testing,Hierarchical Data,我正在构建一个测试驱动的应用程序,将平面文件排序为父子层次结构。现在我想为我自己的排序创建一个非常通用的测试。为此,我想生成一些测试数据,然后进行排序 将被排序的对象将如下所示: public interface IHierarchicalUnitWithChildren { string Id { get; } string ParentId { get; } IList<IHierarchicalUnitWithChildren> Children { g
public interface IHierarchicalUnitWithChildren
{
string Id { get; }
string ParentId { get; }
IList<IHierarchicalUnitWithChildren> Children { get; set; }
}
公共接口IHierarchicalUnitWithChildren
{
字符串Id{get;}
字符串ParentId{get;}
IList子项{get;set;}
}
但是我不想自己创建测试对象。我希望这是由代码生成的,如下所示:
_items = new List<IHierarchicalUnitWithChildren>();
Random random = new Random();
for (int i = 1; i < 1000; i++)
{
var item = new HierarchicalUnitMock()
{
Oid = i.ToString(),
Children = new List<IHierarchicalUnit>(),
};
// We need a couple of roots.
if (i%100 != 0)
{
item.Poid = random.Next(1, 100).ToString();
}
_items.Add(item);
}
\u items=新列表();
随机=新随机();
对于(int i=1;i<1000;i++)
{
var item=新的HierarchycalUnitMock()
{
Oid=i.ToString(),
Children=新列表(),
};
//我们需要一些根。
如果(i%100!=0)
{
item.Poid=random.Next(1100).ToString();
}
_项目。添加(项目);
}
我可以很容易地生成一千个项目,但我还需要给它们一个有效的父级。我如何确保我正在创建一个有效的结构,在这里我有几个根,所有的孩子都有有效的父母
任何项目都不应该有一个父项是其自身的子项(或孙子项),从而使其成为一个无限层次
还是我想的全错了?测试是否应该始终具有静态数据
更新:
是否有任何方法可以通过智能循环实现这一点,该循环始终生成相同的数据?所以测试用例总是相同的?在测试中随机实时生成数据不是一个好主意。您无法保证每次的测试条件都是相同的,也无法保证覆盖所有可能的场景 改为:
想一想你的代码是做什么的,如果有必要的话,把它分解成伪代码,然后试着想出一些可能破坏它的场景。将您的测试数据设置为专门导致这些情况的数据。好吧,我准备同意您的看法。正如您所说,测试用例并不是每次都是相同的,它是测试的关键组件之一。