有没有一种方法可以提取方法中使用的实例和静态变量,以了解哪些对象需要进行模拟?

3

我正在开发涉及Mockito的JUnit测试案例。

在方法中使用许多实例和静态变量的情况很常见。

手动检查方法中所有代码行以获取需要mock的对象的整体理解是相当繁琐的。

我想知道是否有更简单的方法来提取方法中使用的实例和静态变量。 我也是JUnit和Mockito的新手。 谢谢。


在方法中使用了许多实例和静态变量,平均有多少个?另外,通过实例变量,您是指类级实例变量还是使用new T()初始化的方法本地对象? - Sabir Khan
@ Sabir Khan:2或3个只读静态变量和4到6个实例变量。所有这些都是类级别的变量。 - Marco99
@GhostCat,您提供的答案绝对是有益的。我非常感谢并珍视您的时间。我在您的答案下面添加了我的评论。了解一种提取方法中使用的实例和静态变量的方法将非常有帮助。谢谢。 - Marco99
非常欢迎您 ;-) - GhostCat
1个回答

3
你得出了错误的结论。
你发现很难为你的生产代码编写好的单元测试,因为它包含许多需要模拟的内容。
你想通过某种方式自动模拟一切可能阻止你的生产代码在单元测试设置中运行的东西来解决这个问题。
错误的方法:你试图绕过症状。
根本原因很可能是你编写了难以测试的生产代码。答案是:花时间和精力学习如何编写易于测试的生产代码。例如,可以从这些视频开始。
你看,任何你的生产代码包含的类或方法都应该遵循单一职责原则。这就足以驱使你编写包含最少数量“外部依赖”的生产代码。
此外,要理解使用 static 在良好的面向对象编程中基本上是一种异常情况。当然,它有其存在的价值 - 但是,一旦“X 是静态的”转化为“X 破坏了我的单元测试”,你又犯了一个错误。任何使用 static 破坏您对某些内容进行单元测试的情况都清楚地表明,您应该再次修复设计问题。

我完全同意OP所描述的情况表明了一个次优设计,而且他可能也意识到了这一点。他并不是在寻求“自动模拟一切”的解决方案,而是要“提取方法中使用的实例和静态变量”,这同样可以用作质量指标。 - Ralf Kleberhoff
手动检查方法中的所有代码行以获取需要模拟的对象的想法非常繁琐。我读到...以我写下的答案方式。到目前为止,OP没有给出任何进一步的反馈。请放心:当OP澄清他们的输入时,我没有问题丢掉90%的答案以匹配更改的输入;-) - GhostCat
@GhostCat:我同意存在设计问题,并正在努力解决。实际上,单元测试用例最终会清理代码。感谢您提供的详细信息和视频集的参考。一个方法中使用的实例变量也会在其他方法中使用。这就是依赖关系堆积的地方。再次感谢您的回答!对于该问题的任何进一步输入都将有所帮助。 - Marco99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接