C# 简单树结构操作的单元测试
给出一个非常简单的结构,例如:C# 简单树结构操作的单元测试,c#,unit-testing,tree,c#-3.0,pattern-matching,C#,Unit Testing,Tree,C# 3.0,Pattern Matching,给出一个非常简单的结构,例如: public class TreeNode { public int ID { get; set; } public List<TreeNode> Children { get; set; } } 如果我基于某些条件对树执行添加/更新/删除操作。例如,基于我上面提到的一个或多个其他属性删除节点时,我想比较更改前后的树形图,然后通过单元测试验证以下内容: 树保持不变 指定的节点将被删除 将添加指定的节点 将更新指定的节点 上面的3个步
public class TreeNode
{
public int ID { get; set; }
public List<TreeNode> Children { get; set; }
}
如果我基于某些条件对树执行添加/更新/删除操作。例如,基于我上面提到的一个或多个其他属性删除节点时,我想比较更改前后的树形图,然后通过单元测试验证以下内容:
- 树保持不变
- 指定的节点将被删除
- 将添加指定的节点
- 将更新指定的节点
- 上面的3个步骤同时也验证了树的其余部分是否保持不变
TIA当我对树结构进行单元测试时,我只需构建一个已有结构的特别树,对其执行操作,并验证更改是否完全符合我的预期,如果您创建了良好的测试用例,这是一种非常简单但可用的方法 不管我的经验如何,您可能会想到一些针对树节点的递归比较方法,这些方法可能会返回不同的子节点列表。所以基本思想是维护两个相等的树,对其中一个树执行操作,然后检查更改了什么 如果您没有任何显示树的UI,我还建议您使用可视化树,您可以在某些操作之前和之后生成树的图片,这样您就可以看到整个结构是如何更改的(不适用于单元测试,但无论如何)
最后一件事,我建议有一个根节点,它将简化递归算法。如果您没有根,因为UI的某些要求,您可以修改该部分以忽略根。您还可以使用一个函数获取树的字符串表示形式,并简单地比较2个字符串表示形式,而不是比较2个树 这周早些时候我就这么做了 示例函数(swift) 你可以这样测试它
XCTAssert ( tree.description == "beverages {hot {tea {black, green, chai}, coffee, cocoa}, cold {soda {ginger ale, bitter lemon}, milk}}");
public var description: String {
var s = "\(value)"
if !children.isEmpty {
s += " {" + children.map { "\($0.description)"}.joined(separator: ", ") + "}"
}
return s
}
XCTAssert ( tree.description == "beverages {hot {tea {black, green, chai}, coffee, cocoa}, cold {soda {ginger ale, bitter lemon}, milk}}");