gpt4 book ai didi

java - 我应该测试算法的确切结果还是只测试结果的某些元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:54 25 4
gpt4 key购买 nike

我已经编写了一个 BFS 算法,我想测试该算法。

我用两种方法编写了测试,因为我意识到例如存储相邻顶点的方式可能会改变并且顺序会不同,因此结果会不同但不一定不正确。

全路径测试:

@Test
void traverse_UndirectedGraph_CommonTraverse() {
BreadthFirstSearchTest<String> breadthFirstSearchTest= new BreadthFirstSearchTest<>(undirectedGraph);
assertIterableEquals(Lists.newArrayList("A", "B", "E"), breathFirstSearch.traverse("A", "E"));
}

测试路径是否包含初始顶点和终止顶点:

@Test
void traverse_UndirectedGraph_CommonTraverse() {
BreadthFirstSearchTest<String> breadthFirstSearchTest= new BreadthFirstSearchTest<>(undirectedGraph);
List<String> path = breathFirstSearch.traverse("A", "E");
assertEquals("A", path.get(0));
assertEquals("E", path.get(path.size() - 1));
}

这两种方法是否正确?如果不是,您将如何测试该算法?

最佳答案

Is any of these two approaches correct?

可能吧。但是,如果不完全了解您的全部要求和上下文(例如您的搜索所依赖的类/数据结构),这很难说。

If no how would you test that algorithms?

我会遵循 TDD。

意思是:您首先开始编写测试。

准确地说:

  • 你写了一个简单的测试
  • 你确保测试失败
  • 然后您编写刚好“生产”代码,以便您的测试通过
  • 您可能会重构您的代码库(以提高其质量)
  • 回到第一步

换句话说:您在开发算法的同时逐渐从小型、简单的测试走向更高级的场景。

除此之外,您还可以从真正的“测试人员”角度来看待这个问题。意思是:你完全忽略了实现。相反,您查看问题以及生产代码应遵循的契约(Contract)。然后你尝试为所有重要案例寻找示例,最重要的是:边缘案例。您将它们写下来,然后针对您的实现运行它们。

(最像:你的两个测试用例太简单了,你还需要更多)

关于java - 我应该测试算法的确切结果还是只测试结果的某些元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58506820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com