当前位置: 首页 > 面试题库 >

JUnit:仅使用静态方法测试助手类

邓正真
2023-03-14
问题内容

我正在使用JUnit4和Cobertura仅使用静态方法测试助手类。测试方法是一项容易的任务,并且已经完成。

但是,cobertura显示该类没有被测试完全覆盖,因为它没有在任何地方实例化。

我不想创建此类的实例(它是一个帮助程序类),因此第一个解决方案是隐藏构造函数(这通常是帮助程序类的好方法)。

然后,cobertura抱怨测试未涵盖空的私有构造函数。

有什么解决方案可以在这种情况下实现100%的代码覆盖率吗?

高层管理人员(在这种情况下)需要代码覆盖,因此对我而言,获得此特定类的100%很有帮助。


问题答案:

有几种解决方案:

  1. 您可以添加一个公共构造函数并从测试中调用它。尽管这没有任何意义,但也不会造成太大的伤害。

  2. 创建一个虚拟静态实例(您可以在此处调用私有构造函数)。丑陋,但您可以为该字段命名以传达您的意图(这JUST_TO_SILENCE_COBERTURA是一个好名字)。

  3. 您可以让您的测试 扩展 助手类。这将本质上调用默认构造函数,但您的帮助器类将不再可用final

我建议最后一种方法,特别是因为该类final不再存在。如果您的代码使用者希望添加另一个帮助程序方法,则他们现在可以扩展现有的类并接收一个句柄以获取所有帮助程序方法。这将创建一个辅助方法的耦合,以传达意图(它们属于同一对象)-如果helper类是final

如果要防止用户意外地实例化helper类,请使其成为abstract代替使用隐藏的构造函数。



 类似资料:
  • 我正在为我的项目编写junit测试用例,但我在这里面临一个问题,就是我在我的一个java类(GraphNodes.java)中使用的方法 这是我的Junit测试类 我的junit失败了,它说excepted<3>但actual<0>而且我不能将静态方法仅改为public,因为这会影响代码的某些功能,而且由于我是junit的新手,所以我不知道如何解决这一问题。所以有人能在这里帮助我吗?谢谢!!

  • 问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序

  • 我编写了一个Java类,在这个类中尝试访问FTP。 我在Eclipse上工作,我想对它进行一个Junit测试。我知道如何测试公共类,但我仍然停留在测试静态void main方法上。 我开始像这样创建ftptest.java: 如有任何帮助,我们将不胜感激。 谢谢!

  • 问题内容: 我有一些通用的设置代码,已将这些代码分解为标记为的方法。但是,不必为每个测试都运行所有这些代码。有没有一种标记方式,使得该方法仅在某些测试之前运行? 问题答案: 只需将不需要安装代码的测试移到单独的测试类中即可。如果您有一些测试通用的其他代码,可以帮助保留这些代码,请将其移到帮助程序类中。

  • 英文原文:http://emberjs.com/guides/testing/test-helpers/ 测试Web应用最大的问题是代码都是事件驱动的,因此很可能出现异步的情况(例如输出与输入不是按照顺序发送)。其衍生问题就是代码可能会以任何可能的顺序执行。 下面这个例子能很好的说明此问题:当一个用户点击了两个按钮,一个接着一个,分别从不同的服务器加载数据。这种情况响应的时间是不同的。 当编写测试

  • 将标准JUnit5测试转换为参数化测试,以便使用Kotlin中的和注释遍历测试用例流。 无法访问数据流。这似乎是这个注释的一个问题,因为按照预期遍历静态定义的选项。 错误: PreConditionViolationException:无法对空目标调用非静态方法{someMethodName}。 参数化测试设置为通过数据类流,类似于Phillip Hauer在参数化测试的数据类中概述的设置。 An