每当我们编写软件程序时,编写功能便成为主要重点,但是确保代码按预期的方式工作同样重要。我们该怎么做?通过编写单元测试用例。它们用于测试最小的代码功能。单元测试用例是软件开发的重要组成部分。在此博客中,我们将介绍无效方法的测试场景和单元测试用例之一。
如何测试无效方法
我们已经知道我们的目标是在类中测试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类的方法。
sendInformationForPublishing()
Person
Publishing
该方法publishInformation()也是无效方法。
publishInformation()
public class Publishing { public void publishInformation(Person person) { System.out.println(person); } }
现在让我们看看如何为这个简单的实现编写单元测试用例。
使用verify()方法 每当我们模拟void方法时,我们都不会期望返回值。这就是为什么我们只能验证是否正在调用该方法的原因。
特点verify():
verify()
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知道在调用给定方法时它不需要执行任何操作。
times()
Mockito
doNothing()
如果我们将调用次数更改为任何其他值,则测试用例将失败。
在这里,我将调用次数更改为2。
就这么简单。这就是我们可以对void方法进行单元测试的方法。
原文链接:http://codingdict.com/