【发布时间】:2016-03-06 21:56:06
【问题描述】:
我正在开发一个框架来简化控制台应用程序的创建。我的框架是用 Scala 编写的,我使用 ScalaTest 和 Mockito 进行单元测试。
我需要能够模拟java.io.Console,但它已被宣布为最终版本。我正在尝试实现 100% 的单元测试覆盖率,这是目前唯一阻碍我的事情 - 在功能测试和单元测试中。
到目前为止,我无法通过任何解决方案走得很远,我只是想不出一种方法来做到这一点。它没有实现我可以模拟的接口,该方法在其他任何地方都不可用,显然我无法扩展它。我在想也许有一个解决方案可能涉及某种动态方法来调用诸如readLine 和readPassword 之类的方法,但我也没有足够的经验来获得这种思路!
【问题讨论】:
-
100% 覆盖率是 CS 中最大的幻想,亚伯拉罕·林肯 :)
-
您是否考虑过查看 SystemRules (stefanbirkner.github.io/system-rules/index.html),它是一组用于处理 System 类的 junit 规则。它可能会给你一些启发。或者,ScalaCheck 可能会在这种情况下提供一些帮助,它是一种不同的测试方法。
-
@SleimanJneidi 我毫不怀疑你是对的! :) 知道是否有解决方案仍然很有趣,这似乎在 Java 的 API 设计中有点疏忽,我还没有遇到过这样的事情。
-
这可能是一个更普遍的问题 - 我建议将问题重命名为“如何模拟或测试最终和静态方法”以吸引更多答案。
标签: java scala unit-testing mocking mockito