使用Mockito和JUnit进行单元测试无效方法


每当我们编写软件程序时,编写功能便成为主要重点,但是确保代码按预期的方式工作同样重要。我们该怎么做?通过编写单元测试用例。它们用于测试最小的代码功能。单元测试用例是软件开发的重要组成部分。在此博客中,我们将介绍无效方法的测试场景和单元测试用例之一。

如何测试无效方法

我们已经知道我们的目标是在类中测试void方法。但是了解为什么我们测试无效方法也非常重要。

每当我们为任何方法编写单元测试用例时,我们都希望该方法有一个返回值。通常,我们使用assert 来检查该方法是否返回我们期望它返回的值,但是对于void方法,它们不返回任何值。那么,如何检查我们的方法是否正常运行?让我们来看一个例子:

在此示例中,我们将创建两个类:Information和Publishing。

本Information类如下所示:

public class Information {
   private final Publishing publishing;
   public Information(Publishing publishing) {
       this.publishing = publishing;
   }
   public void sendInfoForPublishing(Person person) {
       publishing.publishInformation(person);
   }
}

如我们所见,该方法sendInformationForPublishing()是一个空方法。该方法的逻辑很简单。它以一个Person对象为参数,并将该对象传递给Publishing类的方法。

该方法publishInformation()也是无效方法。

public class Publishing {
   public void publishInformation(Person person) {
       System.out.println(person);
   }
}

现在让我们看看如何为这个简单的实现编写单元测试用例。

使用verify()方法 每当我们模拟void方法时,我们都不会期望返回值。这就是为什么我们只能验证是否正在调用该方法的原因。

特点verify()

  1. Mockito为我们提供了一种verify()方法,可让我们验证是否正在调用模拟void方法。
  2. 它使我们可以检查方法调用的数量。因此,如果方法调用返回为零,我们将知道未调用我们的模拟方法。
verify(publishing,times(1)).publishInformation(person);

verify方法采用两个参数。模拟方法对象和要验证的调用数。该times()方法中传递了预期的调用次数。让我们看一下测试用例的外观:

public class InformationTest {
   Publishing publishing = mock(Publishing.class);
   @Autowired
   private Information information;
   @Test
   void whenSendInformationForPublishingIsSuccessful() {
       information = new Information(publishing);
       Person person = ObjectCreator.getPerson();
       doNothing().when(publishing).publishInformation(person);
       information.sendInfoForPublishing(person);
       verify(publishing,times(1)).publishInformation(person);
   }
}

由于我们的函数只会调用publishInformation()一次,因此我们在times()函数中传递了值1 。我们知道,当我们的测试用例将调用嘲笑的publishInformation()方法时,它不会做任何事情。我们需要让Mockito知道这种行为。为此,我们使用该doNothing()方法,简单来说,它将使Mockito知道在调用给定方法时它不需要执行任何操作。

screenshot-from-2020-10-25-15-26-30.png

如果我们将调用次数更改为任何其他值,则测试用例将失败。

在这里,我将调用次数更改为2。

screenshot-from-2020-10-25-15-28-56.png

就这么简单。这就是我们可以对void方法进行单元测试的方法。


原文链接:http://codingdict.com/