【问题标题】:Create object hierarchy for test为测试创建对象层次结构
【发布时间】:2015-10-02 06:38:50
【问题描述】:

我构建了一个测试驱动的应用程序,它将平面文件分类为父子层次结构。现在我想为我自己的排序创建一个非常通用的测试。为此,我想生成一些测试数据,然后对其进行排序。

将被排序的对象将如下所示:

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);
        }

我可以轻松生成一千个项目,但我还需要给它们一个有效的父级。我怎样才能确保我正在创建一个有效的结构,其中我有几个根并且所有孩子都有有效的父母。

任何项目都不应该有一个父级是其自身的子级(或孙级),从而使其成为无限的层次结构。

还是我认为这一切都错了?测试是否应该始终包含静态数据?

更新:

有没有办法通过智能循环来做到这一点,它总是生成相同的数据?这样测试用例总是一样的吗?

【问题讨论】:

    标签: c# unit-testing hierarchical-data


    【解决方案1】:

    在测试中随机生成的数据不是一个好主意。无法保证每次测试条件都相同,也无法保证涵盖所有可能的场景。

    改为:

    想想你的代码做了什么,必要时将其分解为伪代码,并尝试提出可能破坏它的场景。使您的测试数据集专门导致这些情况。

    【讨论】:

    • 好吧,我准备同意你的看法。正如您所说,测试用例不会每次都相同,这是测试的关键组成部分之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多