Junit测试空方法

7

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

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

然而,我们确实希望对其进行单元测试,确保方法内没有任何逻辑。不知道有没有人知道如何测试Java类中的空方法?

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


奇怪的问题... - akki0996
2
为什么这很奇怪?因为测试没有操作方法是奇怪的。 - Simon Guo
我会说奇怪的方法* - akki0996
added notes in the question. - Simon Guo
2个回答

5
您无法通过单元测试来测试一个方法是否没有执行任何操作。要测试这一点,您需要检查不可能发生任何事情确实没有发生。有无数种可能发生的情况。因此,无法编写针对此内容的单元测试。
您唯一可以测试的是特定操作不会发生,例如NullMetricsPublisher不会像MetricsPublisher发送消息。

0

使用依赖注入时,您可以验证以下内容:

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

这将有效地使方法执行无操作。有多种方法可以验证第一点:手动检查状态、在之前和之后序列化对象等。第二点可以通过传递在任何调用上抛出异常的依赖项来简单解决。

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


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