java - 测试深度优先树

标签 java unit-testing tree depth-first-search

我编写了一个 Java 程序来以深度优先的方式浏览一棵树。程序是正确的,但是节点的儿子的选择是随机的。例如在这棵树中:

enter image description here

有时,结果是:

  • A-B-E-C-F-D
  • A-C-F-D-B-E
  • A-B-E-D-C-F

我想对该程序进行测试(单元测试),但我不知道该怎么做?请

我想做一个包含元素的列表,并将列表的元素与我的深度优先树的结果进行比较,但我的深度优先的结果是随机的。那我就不能和List的元素比较了。

最佳答案

您要测试 2 个属性:

  1. 每个节点恰好访问了一个节点
  2. 遍历是深度优先

第一个很容易测试:访问的唯一节点数必须等于树中的节点数。可以针对任何随机树进行测试。

第二个稍微有点棘手 - 在一般情况下表达它可能比测试代码更复杂。更容易根据特定的已知数据选择一些有代表性的约束,即

  • B必须在A之后
  • E 必须在 B 之后立即
  • ...

很难想象现实的代码满足所有树的第一个属性,但仅在特定情况下才会使第二个属性失败。因此,除了最正式的安全关键系统(以及它们使用动态数据结构做什么?)之外,这就足够了。

关于java - 测试深度优先树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8861803/

相关文章:

javascript - 如何从 JavaScript 中的字符串生成树

java - AWS DynamoDBMapper 保存方法不断抛出 `DynamoDBMappingException: not supported; requires @DynamoDBTyped or @DynamoDBTypeConverted`

java - 如何从同一类的实例引用相同的 FXML 元素

java - 为什么读取文件名中包含 ':' 的测试资源会导致 NPE?

ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践

css - Angular 模板和容器的样式递归 css

java - 将java项目导入eclipse

Java反射,从方法中提取泛型类型

javascript - 测试 JS API Lib 的好方法

linux - Bash中的递归广度优先遍历