我已经写了一个BFS算法,我想测试该算法。
我用两种方法编写了测试,因为我意识到,例如,存储相邻顶点的方式可能会发生变化,顺序将有所不同,因此结果将有所不同,但不一定是不正确的。
完整路径测试:
@Test
void traverse_UndirectedGraph_CommonTraverse() {
BreathFirstSearch<String> breathFirstSearch = new BreathFirstSearch<>(undirectedGraph);
assertIterableEquals(Lists.newArrayList("A", "B", "E"), breathFirstSearch.traverse("A", "E"));
}
测试路径是否包含初始顶点和终端顶点:
@Test
void traverse_UndirectedGraph_CommonTraverse() {
BreathFirstSearch<String> breathFirstSearch = new BreathFirstSearch<>(undirectedGraph);
List<String> path = breathFirstSearch.traverse("A", "E");
assertEquals("A", path.get(0));
assertEquals("E", path.get(path.size() - 1));
}
这两种方法中的任何一种正确吗?如果没有,您将如何测试该算法?
这两种方法中的任何一种正确吗?
可能但这很难说[[hard,例如您的搜索所依赖的类/数据结构。如果没有,您将如何测试该算法?
我会遵循TDD。
含义:从编写测试
第一
开始。准确地说:除此之外,您还可以从真正的“测试者”角度看待这个问题。含义:您
totally
忽略实现。相反,您要查看问题以及生产代码应遵循的contract。然后,您尝试查找所有重要案例的示例,最重要的是:边缘案例。您将它们写下来,然后针对您的实现运行它们。 (最像:您的两个测试用例太简单了,您将需要更多)