`
badqiu
  • 浏览: 673890 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Mockito测试实例

    博客分类:
  • Java
阅读更多

Mockito是现在java领域中,用java语言编写的测试代码保持最简洁的一个mock框架(不与groovy等比较)。相比easymock,jmock,编写出来的代码更加容易阅读。无需录制mock方法调用就返回默认值是很大一个优势。

 

以下为实际的精简测试用例使用,相比较其它mock框架,更加容易阅读。更加符合DSL。

 

/**
 * Mockito测试使用实例
 * 
 * @author badqiu 
 * @email badqiu(a)gmail.com
 *
 */
public class MockitoListTest extends Assert{
	
	List<String> mockList = mock(List.class);
	
	@Test //标准测试
	public void test_3A() {
		//arrange
		when(mockList.get(0)).thenReturn("one");
		when(mockList.get(1)).thenReturn("two");
		
		//action
		String result1 = mockList.get(0);
		
		//assert
		assertEquals(result1,"one");
		verify(mockList).get(0);
	}
	
	@Test //返回默认值,无需录制动作
	public void test_default_value_return_by_mockito() {
		//action
		String result1 = mockList.get(0);
		
		//assert
		assertEquals(result1,null);
		verify(mockList).get(0);
	}
	
	@Test //参数的精确匹配及模糊匹配any()
	public void test_arguments_matche() {
		// 参数匹配,使用的eq()等参数匹配,则必须全部使用匹配符,不使用则不用
		// eq() any() anyInt() anyObject() anyMap() anyCollection()
		when(mockList.get(anyInt())).thenReturn("return me by anyInt()");
		
		for(int i = 0; i < 100; i++) {
			assertEquals("return me by anyInt()",mockList.get(i));
		}
	}
	
	@Test //调用次数不同,返回值也不同
	public void test_return_different_values_by_call_times() {
		when(mockList.get(0)).thenReturn("1").thenReturn("2");
		
		assertEquals(mockList.get(0),"1");
		assertEquals(mockList.get(0),"2");
	}
	
	@Test //验证方法调用次数
	public void verify_how_many_times_a_method_is_called() {
		
		mockList.get(0);
		mockList.get(2);
		mockList.get(2);
		mockList.get(2);
		
		//方法调用次数验证
		verify(mockList,atLeastOnce()).get(0);
		verify(mockList,never()).get(1);
		verify(mockList,times(3)).get(2);
	}
	
	// 没有返回值的方法 exception 抛出
	@Test(expected=IllegalStateException.class)
	public void test_throw_exception_with_not_return_value_method() {
		
		doThrow(new IllegalStateException("please not invocke clear() ")).when(mockList).clear();
		
		mockList.clear();
	}
	
	// 有返回值的方法 exception 抛出
	@Test(expected=IllegalStateException.class)
	public void test_throw_exception_with_has_return_value_method() {
		when(mockList.remove(1)).thenThrow(new IllegalStateException("I has return value"));
		
		mockList.remove(1);
	}
	
}
 
2
1
分享到:
评论

相关推荐

    spring集成TestNG与Mockito框架单元测试方法

    TestNG和Mockito是两个在单元测试领域常用的工具,它们分别用于测试管理和模拟对象。本篇文章将深入探讨如何在Spring项目中集成TestNG和Mockito进行单元测试。 TestNG是一个强大的测试框架,它扩展了JUnit的功能,...

    Junit4.12+mockito

    在这个压缩包中,包含的是两个关键工具:JUnit 4.12 和 Mockito,它们是Java开发中广泛使用的单元测试框架。 **JUnit** 是一个开源的Java单元测试框架,它的版本4.12提供了许多增强的功能,包括注解(Annotation)...

    PowerMock+Mockito-junit测试套件1.6.3版本

    PowerMock和Mockito是两个非常流行的Java单元测试框架,结合JUnit,它们可以提供强大的测试能力。在本文中,我们将深入探讨"PowerMock+Mockito-junit测试套件1.6.3版本"中的关键概念、功能和使用方法。 **PowerMock...

    Java mockito单元测试实现过程解析

    在测试类 `ItemServiceTest` 中,我们使用 `@Mock` 注解创建了一个 `ItemRepository` 的 mock 对象,并使用 `@InjectMocks` 注解创建了 `ItemServiceImpl` 的实例。`@Before` 方法用于初始化 mock 对象。这样,当...

    Mockito的重要入门资料

    Mockito作为一种流行的单元测试框架,被广泛应用于Java项目的单元测试中。它通过模拟对象来帮助开发者隔离测试中的依赖项,从而使得测试更加聚焦于被测对象本身的行为。因此,掌握Mockito的基本用法及高级特性对于...

    android单元测试实例一

    2. **网络请求模拟**:如果登录过程涉及网络通信(如向服务器发送请求验证凭据),我们可以使用Mockito或者OkHttp的MockWebServer来模拟网络响应,确保即使在没有网络连接的情况下也能进行测试。 3. **异步操作**:...

    mockito单元测试

    ### Mockito 单元测试详解 #### 一、引言 在软件开发过程中,编写单元测试是一种常见的实践方式,用于确保代码质量与功能正确性。然而,在处理复杂的依赖关系时,传统的方法可能会遇到难题,比如当一个类依赖于多...

    mockito以及mockMVC的一些使用案例

    - 初始化MockMvc:通常在测试类中,通过`MockMvcBuilders.standaloneSetup()`或`MockMvcBuilders.webAppContextSetup()`创建`MockMvc`实例。 - 执行请求:使用`mockMvc.perform()`发送HTTP请求,如`mockMvc....

    基于TestNG+Mockito及自动装配注解的Spring MVC集成测试

    本篇文章将深入探讨如何结合TestNG、Mockito以及Spring的自动装配注解进行有效的集成测试。以下是对这些技术的详细说明: TestNG是一个功能强大的测试框架,它是JUnit的替代品,提供了更丰富的功能,如并行测试执行...

    mockito-soap-cxf:使用JUnit和Mockito测试SOAP服务

    SOAP Web服务模拟实用程序,使用Web服务器实例在本地端口上创建真实的服务端点。 这些端点将请求直接委托给模拟。 用户将从中受益 全栈客户端测试 拦截器 处理程序 简单的JUnit规则设置 SOAP故障帮手 所有这些都...

    基于Springboot+Junit+Mockito做单元测试的示例

    本文将从多个角度详细介绍如何使用Springboot、Junit和Mockito进行单元测试,并以实例代码演示。以下是本文的知识点总结: 一、单元测试的重要性 单元测试是软件测试的一种,以验证软件的每个单元是否能够在各种...

    Packt Publishing Mastering Unit Testing Using Mockito and JUnit (2014)

    - **命名测试实例**:使用 `@Parameters` 注解中的 `name` 属性为每个测试实例指定描述性的名称。 - **设置超时**:通过 `@Timeout` 注解指定测试方法的最大执行时间,超过此时间测试将失败。 #### 三、JUnit 规则 ...

    Mockito+junit5搞定单元测试

    - `@InjectMocks` 注解用于创建待测试类的实例,Mockito 会自动注入模拟对象。 - `@Mock` 注解创建模拟对象,可以配置期望行为。 - `@Spy` 注解创建一个部分模拟对象,通常用于部分模拟真实对象。 3. **Mockito ...

    Mockito Cookbook - Packt

    - **主要功能**:本书提供了大量的实例来展示Mockito功能的实际应用,不仅限于文档介绍,还包括如何高效地使用Mockito进行单元测试的方法。 - **应用场景**:适用于JUnit、PowerMock、TestNG等流行单元测试框架。 #...

    SpringBoot项目中使用Mockito的示例代码

    在Spring Boot项目中使用Mockito是非常有用的,它可以帮助我们更好地进行单元测试和集成测试。在本文中,我们将通过示例代码来介绍如何在Spring Boot项目中使用Mockito, 以及它的优点和注意事项。 什么是Mockito?...

    Practical-Unit-Testing-with-TestNG-and-Mockito_examples

    《单元测试实战:TestNG与Mockito应用解析》 单元测试是软件开发过程中的重要环节,它能够确保代码的正确性、稳定性和可维护性。TestNG和Mockito是两个非常流行的Java单元测试工具,它们提供了强大的功能和灵活的...

    使用mockito玩转junit test

    Mock对象是模拟的类实例,它们可以替代真实的依赖,避免在测试中实际调用外部系统或服务。Stub则是预先定义的返回值或行为,用于控制mock对象的响应。当我们使用Mockito创建mock对象时,可以指定它对特定方法调用的...

    junit4单元测试实例

    本篇文章将深入探讨JUnit4的单元测试实例,帮助你更好地理解和应用这个工具。 一、JUnit4简介 JUnit4相较于之前的版本,引入了注解(Annotation)机制,极大地简化了测试用例的编写。例如,`@Test`注解用于标记测试...

    mockito-sample:在JUnit测试用例中如何使用Mockito创建模拟对象的快速示例

    Mockito 是一个流行的 Java 单元测试框架,它允许开发者创建模拟对象来隔离被测试代码,以便更好地控制测试环境。这个“mockito-sample”项目提供了一个快速示例,展示了如何在 JUnit 测试用例中使用 Mockito。让...

Global site tag (gtag.js) - Google Analytics