`

Spring boot junit test

 
阅读更多

Refer to:

https://www.baeldung.com/spring-boot-testing

a. JUnit test 的类型以及如何取舍:

 Unit tests that can run in isolation as well as integration tests that will bootstrap Spring context before executing tests. 两种,isolation, integration test. Ideally, we should keep the integration tests separated from the unit tests and should not run along with the unit tests.The integration tests need to start up a container to execute the test cases.

b. 关于Integration Test

   The @SpringBootTest annotation can be used when we need to bootstrap the entire container. The annotation works by creating the ApplicationContext that will be utilized in our tests.

 

 

@RunWith(SpringRunner.class) is used to provide a bridge between Spring Boot test features and JUnit,Whenever we are using any Spring Boot testing features in our JUnit tests, this annotation will be required.

1.Test Dao(reposotory层) : DataJpaTest 可以自动生成内存数据库,下面这个EntityManager是用的TestEntityManager, 可以很方便的把数据先插入到数据库中。JPA可以方便的自动生成 H2结构,并方便的插入数据,那么mybatis 怎么办呢?

 

 

@Test
public void whenFindByName_thenReturnEmployee() {
    // given
    Employee alex = new Employee("alex");
    entityManager.persist(alex);
    entityManager.flush();
 
    // when
    Employee found = employeeRepository.findByName(alex.getName());
 
    // then
    assertThat(found.getName())
      .isEqualTo(alex.getName());
}

 2. Test service层

 

Ideally, we should be able to write and test our Service layer code without wiring in our full persistence layer.

2.1   使用 @TestConfiguration 重新生成Service(只在Test环境中有效),重新生成的Service中Mock repository 层

2.2 @MockBean. It creates a Mock for the EmployeeRepository which can be used to bypass the call to the actual EmployeeRepository:

 

@RunWith(SpringRunner.class)
public class EmployeeServiceImplIntegrationTest {
 
    @TestConfiguration
    static class EmployeeServiceImplTestContextConfiguration {
  
        @Bean
        public EmployeeService employeeService() {
            return new EmployeeServiceImpl();
        }
    }
 
    @Autowired
    private EmployeeService employeeService;
 
    @MockBean
    private EmployeeRepository employeeRepository;
 
    // write test cases here
}

 

@Before
public void setUp() {
    Employee alex = new Employee("alex");
 
    Mockito.when(employeeRepository.findByName(alex.getName()))
      .thenReturn(alex);
}

 3. Controller 层:Mock Service层

To test the Controllers, we can use @WebMvcTest. It will auto-configure the Spring MVC infrastructure for our unit tests.

In most of the cases, @WebMvcTest will be limited to bootstrap a single controller. It is used along with @MockBean to provide mock implementations for required dependencies.

@WebMvcTest also auto-configures MockMvc which offers a powerful way of easy testing MVC controllers without starting a full HTTP server.

@RunWith(SpringRunner.class)
@WebMvcTest(EmployeeRestController.class)
public class EmployeeRestControllerIntegrationTest {
 
    @Autowired
    private MockMvc mvc;
 
    @MockBean
    private EmployeeService service;
 
    // write test cases here
}

 

@Test
public void givenEmployees_whenGetEmployees_thenReturnJsonArray()
  throws Exception {
     
    Employee alex = new Employee("alex");
 
    List<Employee> allEmployees = Arrays.asList(alex);
 
    given(service.getAllEmployees()).willReturn(allEmployees);
 
    mvc.perform(get("/api/employees")
      .contentType(MediaType.APPLICATION_JSON))
      .andExpect(status().isOk())
      .andExpect(jsonPath("$", hasSize(1)))
      .andExpect(jsonPath("$[0].name", is(alex.getName())));
}

 

 

分享到:
评论

相关推荐

    27. Spring Boot Junit单元测试【从零开始学Spring Boot】

    Spring Boot Junit单元测试【从零开始学Spring Boot】"的主题,深入探讨Spring Boot中Junit单元测试的使用方法和最佳实践。 首先,我们要了解什么是单元测试。单元测试是一种针对软件中的最小可测试单元(如方法)...

    spring boot Junit4配置

    这包括JUnit4本身,Spring的`spring-test`模块以及Spring Boot的`spring-boot-starter-test`模块。这三个依赖分别提供了JUnit4的基本功能,Spring对测试的支持以及Spring Boot测试相关的工具和配置。以下是添加依赖...

    spring-boot-test示例程序

    Spring Boot提供了测试支持模块,包含`spring-boot-starter-test`,这个模块引入了许多用于测试的依赖,如JUnit、Mockito、Hamcrest、Spring Test等。这些工具帮助开发者编写高效的单元测试和集成测试。 2. **...

    spring-boot-junit5-starter:为Junit 5配置的框架Spring Boot项目

    使用JUnit 5的Spring Boot...在撰写本文时,Spring Boot Starter Test引入了JUnit(即JUnit 4)而不是JUnit 5(即 )。 来源 您也可以创建此项目! 使用生成一个项目。 将来自的配置合并到pom.xml 。 利润! 执照 。

    SpringBoot中整合Junit测试示例源码

    在Spring Boot框架中,Junit是一个非常重要的工具,它用于编写和执行自动化测试。Spring Boot提供了与Junit的紧密集成,使得我们可以轻松地创建和运行测试用例,从而确保我们的应用代码的质量。以下是对这个主题的...

    SpringBootJunit5Sample:Spring Boot 1.5.10 JUNIT5

    2. 编写测试类:使用`@SpringBootTest`注解启动Spring Boot应用上下文,并在测试方法上使用JUnit5的`@Test`注解。例如: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory....

    详解Spring Boot Junit单元测试

    详解Spring Boot Junit单元测试 本篇文章主要介绍了Spring Boot Junit单元测试的重要性和使用方法。单元测试是软件测试中的一种测试方法,通过编写测试用例来验证代码的正确性和稳定性。在Spring Boot项目中,使用...

    springboot 的junittest 单元测试的例子

    总之,`springboot-junittest`这个压缩包可能包含了上述讨论的一些示例代码和配置,帮助读者更好地理解和实践Spring Boot中的JUnit测试。通过深入学习和实践,开发者可以编写出高质量、高覆盖率的测试,增强软件的...

    Spring Boot高级.rar

    9. **测试支持**:Spring Boot提供了测试starter,包括`spring-boot-starter-test`,它包含了JUnit、Mockito、Hamcrest等测试工具,方便进行单元测试和集成测试。 10. **配置文件**:Spring Boot支持`application....

    day38 20-Spring与Junit整合

    6. **Spring Boot的@Test和@SpringBootTest注解**:`@Test`是JUnit的注解,用于标记测试方法。而在Spring Boot中,`@SpringBootTest`注解可以加载整个Spring应用上下文,适合进行集成测试。如果只想加载特定的配置,...

    Spring Boot应用开发框架 v3.0.12.zip

    7. **测试支持**:内置了对JUnit和Spring Test的支持,方便进行单元测试和集成测试。 8. **Actuator的安全性**:在v3.0.12版本中,Spring Boot对Actuator的安全性进行了增强,可以配置安全策略,保护敏感端点。 9....

    Spring Boot源码(spring-boot-2.6.2.tar.gz)

    对于测试,Spring Boot提供了`spring-boot-starter-test`模块,包含JUnit、Mockito等测试工具,使得单元测试和集成测试更加方便。源码中的测试相关组件在`org.springframework.boot.test`包下。 Spring Boot还支持...

    spring-boot-test:使用 spring boot 测试代码

    这个模块包含了多种测试相关的依赖,如JUnit、Mockito、Spring Test以及Spring Boot的测试支持类。下面将详细阐述如何使用Spring Boot进行测试代码的编写。 首先,Spring Boot提供了`@SpringBootTest`注解,这是...

    java maven工程 spring boot 学习源码

    - src/test/java:测试代码目录,使用JUnit或其他测试框架进行单元测试或集成测试。 - pom.xml:Maven的项目对象模型文件,定义了项目的依赖和构建过程。 通过这个学习源码,你可以学习到如何组织Spring Boot的...

    StringBoot+Junit测试

    在本主题中,我们将深入探讨"StringBoot+Junit测试"这一组合,它涉及Spring Boot框架与JUnit单元测试工具的集成应用。Spring Boot是Java生态系统中的一个流行框架,用于简化Spring应用程序的创建和配置,而JUnit是...

    Eclipse Spring Boot maven web demo 简单项目实例

    4. **src/test/java**:测试代码目录,包含JUnit或其他测试框架的测试类,用于验证应用的功能。 项目实例可能还包含了前端元素,尽管没有具体说明。Spring Boot支持多种前端技术,如Bootstrap、Vue.js或React,这些...

    使用MyEclipse创建Spring Boot项目demo

    Spring Test & Spring Boot Test:为 Spring Boot 应用提供集成测试和工具支持 AssertJ:支持流式断言的 Java 测试框架 Hamcrest:一个匹配器库 Mockito:一个 java mock 框架 JSONassert:一个针对 JSON 的断言...

    Spring Boot 学习示例

    Spring Boot 提供了丰富的测试工具,包括 Spring Boot Test、JUnit、Mockito 等,方便进行集成测试和端到端测试。 10. **外部配置** 通过 `application.properties` 或 `application.yml` 文件,你可以轻松地对 ...

    使用Gradle 构建spring Boot工程系列项目源码(配合第五篇文章)

    7. **源码组织**:Spring Boot项目通常遵循Maven或Gradle的约定,源代码通常分为`src/main/java`(主代码)、`src/main/resources`(资源文件)和`src/test/java`(测试代码)三个部分。 8. **配置文件**:Spring ...

    最简单的含单元测试的spring boot+activiti集成demo

    4. **src/test/java**: 单元测试代码目录,用JUnit或其他测试框架编写针对应用和Activiti流程的测试。 5. **src/main/webapp**: 如果应用有Web界面,此目录将包含静态资源和视图模板。 **集成流程** 集成Spring ...

Global site tag (gtag.js) - Google Analytics