源:https://blog.csdn.net/z199172177/article/details/79731952
评:
重构代码时一套完善的测试工作能给我们莫大的帮助,下面时我使用Mockito做的Demo,目的是替换掉Dubbo 的相关接口。供不熟悉Mockito 的同学做参考。
junit:junit:4.11
org.springframework:spring-test:3.2.4.RELEASE
org.mockito:mockito-all:1.10.19
jdk1.8
BaseTest
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations = {"classpath:spring/application.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseTest {
@Before
public void setup() {
/** 如果同时需要注入和mock注入,SpringJUnit4ClassRunner的前提下,注入mock */
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
Assert.assertEquals(1, 1);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MockTestDemo
import cn.idongjia.makalu.biz.PostBO;
import cn.idongjia.makalu.domain.post.MakaluUser;
import cn.idongjia.makalu.manager.ClanManager;
import cn.idongjia.makalu.pojo.post.Post;
import cn.idongjia.makalu.repo.PostRepo;
import cn.idongjia.makalu.service.PostService;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import javax.annotation.Resource;
import java.util.Optional;
/*
* service 被标记了 @InjectMocks , 在 setup 方法中 执行 MockitoAnnotations.initMocks(this); 的时候,会将标记了
* @Mock或 @Spy 的属性注入到 service 中。
* 如果是 @Mock, 那就是通常的方式,service里面的provider完全被Mock实例替换,所有的调用都是针对Mock生成类的。
* 如果是 @Autowired 加 @Spy , 那么对于定制了返回值的会调用 Mock实例,否则会调用真实注入的属性。
*/
public class MockTestDemo extends BaseTest{
@InjectMocks
@Resource
PostService postService;
@InjectMocks
@Spy
@Resource
private PostBO postBO;//注入到postService 中
@InjectMocks
@Spy
@Resource
private PostRepo postRepo;//注入到postRepo 中
//Dubbo接口
@Mock
private ClanManager clanManager;//注入到postRepo 中
@Test
public void test() {
System.out.println("======***************");
/**
* 构造一个自己的对象。
*/
User mu = new User();
mu.setUsername("zzz");
Optional<User> user = Optional.of(mu);
// 设置模拟对象的返回预期值
Mockito.when(clanManager.takeUser(21L)).thenReturn(user);
Post post = this.postService.get(5L);
System.out.println(String.format("使用mock后的结果:%s", post.getUsername()));//修改后的结果值
System.out.println("======***************");
}
相关推荐
基于Springboot+Junit+Mockito做单元测试的示例 本文将从多个角度详细介绍如何使用Springboot、Junit和Mockito进行单元测试,并以实例代码演示。以下是本文的知识点总结: 一、单元测试的重要性 单元测试是软件...
在实际项目中,可能还需要考虑更多细节,例如使用Mockito进行模拟对象(Mock Objects)以隔离被测试代码,或者使用@Test注解的expected属性来测试预期异常。此外,Spring的TestContext框架可以进一步简化测试环境的...
在实际的项目中,我们可能还需要配合使用其他的测试工具和库,例如Mockito用于模拟对象,Hamcrest或AssertJ用于增强断言功能,或者使用Spring Boot的`@SpringBootTest(webEnvironment = SpringBootTest....
1. **配置测试环境**:引入Spring Test和JUnit相关的依赖,创建一个继承自`AbstractJUnit4SpringContextTests`或`SpringRunner`的测试类。在测试类上使用`@RunWith(SpringRunner.class)`注解启用Spring测试支持,并...
5. **单元测试与集成测试**:利用JUnit和Mockito等工具进行测试,确保代码质量。 6. **缓存机制**:如使用Redis进行数据缓存,减少数据库压力。 7. **任务调度**:使用Quartz或Spring Task进行定时任务,如自动提醒...
- **@RunWith(SpringJUnit4ClassRunner.class)**:这个注解将JUnit测试类与Spring TestContext框架关联起来,使Spring能够管理测试环境。 - **@ContextConfiguration**:此注解用于指定测试所需的配置文件,Spring...
在Spring Boot项目中,我们通常使用`@RunWith(SpringRunner.class)`来运行JUnit测试,并且使用`@SpringBootTest`注解来启动一个Spring应用上下文。 Mockito是一个流行的Java模拟框架,它允许我们在测试中模拟依赖...
在本文中,我们将深入探讨如何使用Spring MVC、MyBatis、Maven和JUnit这四大核心技术来构建一个功能完备的Web应用程序,实现数据的增、删、查、改(CRUD)操作。Spring MVC作为Spring框架的一部分,是用于构建Web...
总结来说,“spring junit”涉及到的是在Spring框架下使用JUnit进行单元测试的方法和技术,这包括如何配置测试环境、注入依赖、模拟对象、管理事务等,这些都是保证代码质量和可维护性不可或缺的实践。而与MyBatis的...
最后,压缩包中的"Testing"文件可能包含了相关的测试代码示例,包括TestNG测试类、Mockito模拟对象的定义以及Spring的配置文件。通过分析这些代码,读者可以更好地理解如何将这些技术结合起来进行高效的集成测试。 ...
3. **Mockito和Spring Boot测试**:在Spring Boot项目中,经常使用Mockito库来创建mock对象,隔离被测试代码的依赖。`@MockBean`和`@SpyBean`注解可以在Spring应用上下文中创建mock对象或部分模拟对象。 4. **@...
对于Spring和JPA的应用,我们可以使用JUnit和Mockito进行单元测试。JUnit是Java的单元测试框架,Mockito则用于模拟协作对象,使得测试更加隔离。Spring Boot提供了一个测试框架,允许我们轻松地创建和配置测试环境,...
接下来,我们要创建一个测试类,该类需要继承Spring的`AbstractJUnit4SpringContextTests`或`SpringJUnit4ClassRunner`。前者适用于Spring 3.x,后者适用于Spring 4.x及更高版本。这些基类会帮助我们加载Spring上...
综上所述,"单元测试案例junit +spring mvc +springboot"涉及的是使用JUnit进行单元测试,结合Spring MVC和Spring Boot的特点,对服务端代码进行详尽的验证,确保代码的稳定性和可靠性。通过合理的测试策略和工具,...
7. 整合测试:介绍如何使用JUnit、Mockito等工具对整合后的系统进行单元测试和集成测试。 由于源码并未随电子书一同提供,读者可能需要自行实践书中所讲的案例,以加深理解和掌握这些技术。通过学习这本书,开发者...
将 `JUnit` 与 `Spring`、`Hibernate` 结合使用,可以对 `DAO(Data Access Object)` 层进行有效的测试,确保数据访问逻辑的正确性。 首先,`DAO` 层是业务逻辑和数据库操作之间的隔离层,通常包含了增删改查等...
7. **测试**:在项目中,单元测试和集成测试是非常重要的,可以使用JUnit、Mockito等工具对服务层和控制层进行测试,确保功能的正确性。 8. **部署与运行**:项目完成后,通常打包成WAR文件部署到Tomcat、Jetty等...
通过Mockito,你可以创建和配置模拟对象,以便在测试中隔离被测代码,避免依赖外部服务或数据库。 2. **ApplicationContext**: `spring-test`提供了`@ContextConfiguration`注解,允许你在测试类上声明配置文件的...
测试类中的方法通常使用JUnit的`@Test`注解,以及Spring提供的断言库,如`AssertJ`或`Mockito`来验证预期行为: ```java @RunWith(SpringRunner.class) @SpringBootTest(classes = TestConfig.class) public class ...
3. **Spring Test**:使用@RunWith(SpringJUnit4ClassRunner.class)注解标记测试类,表明这是一个Spring测试。通过@ContextConfiguration注解指定上下文配置文件,Spring Test会加载这个配置文件,初始化应用上下文...