c# - 单元测试简单的树结构操作

标签 c# unit-testing tree c#-3.0 pattern-matching

给定一个非常简单的结构,如下所示:

public class TreeNode
{
    public int ID { get; set; }
    public List<TreeNode> Children { get; set; }
}

TreeNode 可能有其他属性。

当按以下方式使用时:

var tree = new List<TreeNode>(); //no root node

如果我根据某些条件对树执行添加/更新/删除操作。例如,根据我上面提到的一个或多个其他属性删除节点,我想比较更改前后的 TreeMap ,然后通过单元测试验证一些遵循:

  • 树保持不变
  • 指定节点已删除
  • 已添加指定节点
  • 更新指定节点
  • 执行上述 3 项操作,同时还验证树的其余部分是否未更改。

理想情况下,我会抛出一个期望,列出未找到、未预期的节点等。但是,在这个阶段,我很乐意对我的检查进行真/假检查。

是否有任何已知的模式/算法现有项目可以对此有所帮助?

我很高兴使用其他语言的伪代码或示例,只要它们不依赖于我无法在 .NET 中复制的功能。

我的树不太可能达到超过 7 或 8 层深度,并且总共不超过 100 个节点,因为它将是测试数据,因此暴力循环很好,此时不考虑性能。

我真的在寻找关于如何解决这个问题的提示、技巧、建议和代码。

TIA

最佳答案

当我对树结构进行单元测试时,我只是构建了一个已知结构的临时树,对其执行操作并验证更改是否正是我所期望的,这是一个非常简单但可用的方法,如果您创建良好的测试用例。

无论我的经验如何,您可能会想到一些树节点的递归比较方法,这些方法可能返回不同的子节点列表。所以基本思想是维护两棵相等的树,对其中一棵执行操作,然后检查发生了什么变化。

如果您没有任何显示树的 UI,我还建议使用 http://www.graphviz.org/ 对树进行可视化。 ,您可以在某些操作之前和之后生成树的图片,这样您将看到整个结构是如何改变的(不可用于单元测试,但无论如何)。

最后一件事,我建议有一个根节点,它将简化你的递归算法。如果您没有root权限,由于UI等方面的一些要求,您可以修改该部分以简单地忽略root。

关于c# - 单元测试简单的树结构操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20540451/

相关文章:

c# - Web API 中的 PUT 将始终将 "0"放入服务器

javascript - ASP.NET Core SPA 中基于 JWT 的身份验证 - 前端验证

algorithm - 这棵树叫什么名字?

c# - 如何在 WPF 应用程序中动态生成标签、按钮、复选框和文本框

c# - 将 ODATA xml 序列化/反序列化为 C# 对象

c++ - 使用 CppUnit 或类似工具交叉编译单元测试

java - 如何为将输出打印到控制台的 void 函数编写 junit 测试用例

c# - 单元测试异步函数

angular - Angular 树组件的弹性高度虚拟滚动缺少树数据

c++ - 递归函数破坏一般树c++