我构建了一个测试驱动的应用程序,它将平面文件排序为父子层次结构。现在我想为自己的排序创建一个非常通用的测试。为此,我想生成一些测试数据,然后对其进行排序。
将要排序的对象如下所示:
public interface IHierarchicalUnitWithChildren
{
string Id { get; }
string ParentId { get; }
IList<IHierarchicalUnitWithChildren> Children { 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);
}
我可以很容易地生成一千个项目,但我还需要给他们一个有效的父项。我如何确保我正在创建一个有效的结构,我有几个根,所有的孩子都有父母是有效的。
任何项目都不应该拥有自己的子(或孙子),从而使其成为无限的层次结构。
或者我认为这一切都错了?测试是否应始终具有静态数据?
更新
智能循环是否有任何方法可以生成相同的数据?那么测试用例总是一样的吗?
答案 0 :(得分:1)
在测试中随机生成的数据不是一个好主意。你无法保证测试条件每次都是一样的,也不能保证你能够涵盖所有可能的场景。
<强>相反:强>
考虑你的代码所做的事情,如果必须的话,将其分解为伪代码,并尝试提出可能破坏它的方案。使您的测试数据集专门导致这些条件。