gpt4 book ai didi

java - 如何在仅测试类的接口(interface)的情况下协调单元测试方法和 TDD

转载 作者:行者123 更新时间:2023-12-01 13:49:12 26 4
gpt4 key购买 nike

有一段时间我对单元测试的相互冲突的指导感到困惑。

普遍的观点建议仅使用公共(public)接口(interface)来测试私有(private)方法:Making a private method public to unit test it...good idea?,但是单元测试本身应该测试最小的代码单元,例如各个方法 http://www.javaranch.com/unit-testing.jsp 因此,这些方法最有可能适合单元测试,但也最有可能是类中的私有(private)方法(至少根据我的经验)。

更困难的是,我发现 TDD 在开发时非常有帮助。然而,由于我通常会从开发小代码单元开始,这些方法很可能成为私有(private)方法,它们的功能结合起来会产生一些公共(public)接口(interface)成员 - 破坏我的所有测试。

我知道我可以为此使用反射,但同样,这感觉不是一个好的解决方案。

我非常感谢对此的一些建议,

非常感谢

最佳答案

据我所知,您应该始终只测试公共(public)方法。私有(private)方法是一个实现细节,因此您必须测试它们的特定实现(这很糟糕)。

让我们看一个例子:你有一个持久性类:它接收一个字节数组,并将其保存在某个地方。该类可能包含私有(private)“saveToDB”或“saveToFile”方法,但您并不真正关心 - 您只需要测试“persist”方法。如果“persist”方法有效,则意味着“saveToDB”或“saveToFile”也有效。

这还有另一个优点。例如:“saveToDB”可能没有“isNull”检查,但所有调用它的方法都有它(我知道这是一个不好的做法,但我为了论证而使用它) - 这意味着如果您只检查了“saveToDB”,它会在空数据上失败,尽管它不可​​能在现实世界中发生(这意味着您进行了额外的测试+额外的代码,这在任何方面都没有帮助)。

我还要说一件事:如果你有一个私有(private)方法,它执行非常复杂的逻辑,我建议你尝试将其重构为跨多个类的多个方法,然后检查公共(public)方法。

希望对您有所帮助。

关于java - 如何在仅测试类的接口(interface)的情况下协调单元测试方法和 TDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097182/

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