热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(译)08Mockito预期的调用次数

Mockito对可对特定方法进行的调用数检查。假设MathApplication只调用CalculatorService.serviceUsed()方法一次,则它不应该能够调用

Mockito 对可对特定方法进行的调用数检查。假设 MathApplication 只调用 CalculatorService. serviceUsed () 方法一次, 则它不应该能够调用 CalculatorService. serviceUsed () 多余一次。

//add the behavior of calc service to add two numbers
when(calcService.add(10.0,20.0)).thenReturn(30.00);
//limit the method call to 1, no less and no more calls are allowed
verify(calcService, times(1)).add(10.0, 20.0);

创建 CalculatorService 接口, 如下所示。

文件: CalculatorService. java

public interface CalculatorService {
public double add(double input1, double input2);
public double subtract(double input1, double input2);
public double multiply(double input1, double input2);
public double divide(double input1, double input2);
}

例如

步骤1−创建一个 CalculatorService 接口, 以提供数学函数

文件: CalculatorService. java

/**
* 计算相关服务
*/
public interface CalculatorService {
/**
* 加法
*
* @param input1
* @param input2
* @return
*/
public double add(double input1, double input2);
/**
* 减法
*
* @param input1
* @param input2
* @return
*/
public double subtract(double input1, double input2);
/**
* 乘法
*
* @param input1
* @param input2
* @return
*/
public double multiply(double input1, double input2);
/**
* 除法
*
* @param input1
* @param input2
* @return
*/
public double divide(double input1, double input2);
}

步骤2−创建一个 JAVA 类来表示 MathApplication

文件: MathApplication. java

/**
* 数学应用
*/
public class MathApplication {
private CalculatorService calcService;
public void setCalculatorService(CalculatorService calcService) {
this.calcService = calcService;
}
public double add(double input1, double input2) {
return calcService.add(input1, input2);
}
public double subtract(double input1, double input2) {
return calcService.subtract(input1, input2);
}
public double multiply(double input1, double input2) {
return calcService.multiply(input1, input2);
}
public double divide(double input1, double input2) {
return calcService.divide(input1, input2);
}
}

步骤3−测试 MathApplication 类

让我们测试 MathApplication 类, 通过注入 calculatorService 的Mock。Mock将由 Mockito 创建。

文件: MathApplicationTester. java

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.never;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
// @RunWith attaches a runner with the test class to initialize the test data
@RunWith(MockitoJUnitRunner.class)
public class MathApplicationTester {
//@InjectMocks annotation is used to create and inject the mock object
@InjectMocks
MathApplication mathApplication = new MathApplication();
//@Mock annotation is used to create the mock object to be injected
@Mock
CalculatorService calcService;
@Test
public void testAdd(){
//add the behavior of calc service to add two numbers
when(calcService.add(10.0,20.0)).thenReturn(30.00);
//add the behavior of calc service to subtract two numbers
when(calcService.subtract(20.0,10.0)).thenReturn(10.00);
//test the add functionality
Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0);
Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0);
Assert.assertEquals(mathApplication.add(10.0, 20.0),30.0,0);
//test the subtract functionality
Assert.assertEquals(mathApplication.subtract(20.0, 10.0),10.0,0.0);
//default call count is 1
verify(calcService).subtract(20.0, 10.0);
//check if add function is called three times
verify(calcService, times(3)).add(10.0, 20.0);
//verify that method was never called on a mock
verify(calcService, never()).multiply(10.0,20.0);
}
}

步骤4−执行测试用例

在C: \ > Mockito_WORKSPACE中创建名为 TestRunner 的 java 类文件以执行测试用例。

文件: TestRunner. java

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MathApplicationTester.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}

步骤5−验证结果

使用javac编译器编译类, 如下所示−

C:\Mockito_WORKSPACE>javac CalculatorService.java MathApplication.
java MathApplicationTester.java TestRunner.java

现在运行TestRunner以查看结果−

C:\Mockito_WORKSPACE>java TestRunner

验证输出。

true

翻译自:https://www.tutorialspoint.com/mockito/mockito_expecting_calls.htm


推荐阅读
author-avatar
赖雨蓉744_128
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有