Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.介绍

5是一个受欢迎的Java嘲笑框架。有了它,它很简单创建模拟对象配置模拟行为捕获方法参数, 和验证与模拟的交互

现在,我们将专注于指定模拟行为。我们有两种方法什么时候()。thendosomething()当doSomething () ()句法。

在这个简短的教程中,我们会看到我们为什么有它们。

2。什么时候()方法

让我们考虑以下问题员工界面:

interface Employee {String greet();无效工作(DayOfWeek天);}

在我们的测试中,我们使用这个接口的模拟。让我们说我们想配置模拟的迎接()方法返回字符串“你好”。使用Mockito’s很容易做到这一点什么时候()方法:

@test void gendnonvoidmethod_callingwhen_shouldconfigurebehavior(){//给定何时(employee.greet())。然后return(“hello”);//字符串问候语= employee.greet();//然后assertthat(问候,是(“你好”));}

会发生什么呢?的员工对象是模拟。当我们调用任何方法时,Mockito寄存器呼叫。随着的召唤什么时候()方法时,Mockito知道该调用不是业务逻辑的交互。这是一个语句,我们希望将一些行为分配给模拟对象。在那之后,有一个thenxxx()方法,我们指定了预期的行为。

直到这一点,这是古老的嘲弄。同样,我们想要配置工作()当我们用星期天的争论称之为时,抛出异常的方法:

@test void给dvoidmethod_callingwhen_wontcompile(){//给定何时(employee.work(Dayofweek.sunday))。thenthrow(新的iaomhhayidayexception());// excututable workcall =() - > employee.work(Dayofweek.sunday);//然后断言(iaomhholidayexception.class,workcall);}

不幸的是,这段代码无法编译,因为在工作(employee.work(…))打电话,这工作()方法有一个空白返回类型;因此,我们无法将其包装为另一种方法调用。这是否意味着我们无法模拟vod方法?当然,我们可以。doxxx.救援的方法!

3。doXxx ()方法

让我们看看我们如何配置与之抛出的异常Dothrow()方法:

@test voidedvoidmethod_callingdothrow_shouldconfigurebehavior(){//给定dothrow(新的iaomhholidayexception())。什么时候(员工).work(Dayofweek.sunday);// excututable workcall =() - > employee.work(Dayofweek.sunday);//然后断言(iaomhholidayexception.class,workcall);}

这个语法略有不同于前一个:我们不尝试包裹一个空白方法调用另一个方法调用。因此,此代码编译。

让我们看看刚刚发生了什么。首先,我们说我们想要抛出异常。接下来,我们打电话给了什么时候()方法,我们通过了模拟对象。之后,我们指定了我们想要配置的模拟互动的行为。

请注意,这不一样什么时候()我们以前使用的方法。另外,请注意,我们在调用后链接了模拟互动当()。与此同时,我们使用第一个语法将其定义在括号内。

为什么我们有第一个何时()。thenxxx()当它不能完成这样一个常见的任务时,例如配置空白调用?它有多种优势当doXxx () ()句法。

首先,开发人员为“​​当一些互动时,”当某些互动时“比”做某事“,开发人员更符合逻辑。

其次,我们可以将多种行为添加到与链接相同的交互。那是因为什么时候()返回类的实例onegoarstubbing ,哪个是thenxxx()方法返回相同的类型。

另一方面,doXxx ()方法返回A.猪筋实例,箱。(T Mock)回报T.,所以我们可以指定我们要配置的方法调用。但T.例如,是我们申请的一部分,员工在我们的代码片段中。但T.不会返回一个Mockito类,所以我们将不能添加多个行为的链接。

4.bddmockito.

bddmockito.使用替代语法到我们覆盖的那些。这很简单:在我们的模拟配置中,我们必须替换关键字“什么时候”至 ”给予“和关键词”“ 至 ”“。除此之外,我们的代码保持不变:

@test void给endnonvoidmethod_callinggiven_shouldconfigurebehavior(){//给定(employee.greet())。Willreturn(“Hello”);//字符串问候语= employee.greet();//然后assertthat(问候,是(“你好”));@test voidedvoidmethod_callingwillthrow_shouldconfigurebehavior(){//给定威尔洛(新的iaomhholidayexception())。给定(员工).work(Dayofweek.sunday);// excututable workcall =() - > employee.work(Dayofweek.sunday);//然后断言(iaomhholidayexception.class,workcall);}

结论

我们看到了配置模拟对象的优点和缺点何时()。thenxxx()或者当doXxx () ()办法。此外,我们看到这些语法如何工作以及我们都有两者的原因。

像往常一样,可以使用示例在GitHub

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
对这篇文章的评论关闭!