【问题标题】:Junit Test Empty MethodJunit 测试空方法
【发布时间】:2017-02-08 00:30:37
【问题描述】:

我有一个名为NullMetricsPublisher 的类,里面有几个方法,例如其中一个void publish()。由于类名已经表明该类应该什么都不做。 void publish() 方法本质上是空的。

void publish() {
    // do nothing in this method
}

但是,我们确实想对其进行单元测试,确保方法内部根本没有任何逻辑。想知道有人知道如何在 Java 中测试类的空方法吗?

注意:为什么我们首先使用NullMetricsPublisher?我们确实有另一个名为MetricsPublisher 的类,它将指标发布到我们的指标服务。但是,在某些情况下,我们根本不想发布指标。现有的接口必须需要Publisher,因此,现在我们只是添加了NullMetricsPublisher类来实现Publisher

【问题讨论】:

  • 奇怪的问题...
  • 为什么奇怪?因为 test no ops 方法很奇怪?
  • 我会说奇怪的方法*
  • 在问题中添加了注释。

标签: java unit-testing testing


【解决方案1】:

你不能用单元测试来测试一个方法什么都不做。为了对此进行测试,您需要检查是否没有任何可能发生的事情发生。有无穷无尽的事情可能发生。因此无法为此编写单元测试。

您唯一可以测试的是特定操作不会发生,例如NullMetricsPublisher 不会像 MetricsPublisher 这样发送消息。

【讨论】:

    【解决方案2】:

    使用dependency injection 时,您可以验证:

    1. 没有更改内部状态。
    2. 不调用任何依赖项。

    这将有效地使该方法执行的任何操作都无效。有多种方法可以验证第 1 点:手动检查状态、序列化前后对象等。第 2 点可以简单地通过传入任何调用引发的依赖项来解决。

    如果您有一些静态全局类(如 Environment.getConnection().publish())或不使用 DI,则此解决方案会失效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 2018-12-22
      相关资源
      最近更新 更多