如何使用springboot编写rest控制器、服务和dao层的junit测试用例?

Posted

技术标签:

【中文标题】如何使用springboot编写rest控制器、服务和dao层的junit测试用例?【英文标题】:How to write junit test cases for rest controller, service and dao layer using springboot? 【发布时间】:2019-12-30 21:17:59 【问题描述】:

JUnitRestControllerServiceDAO层的测试用例怎么写?

我试过MockMvc

@RunWith(SpringRunner.class)
public class EmployeeControllerTest 

    private MockMvc mockMvc;

    private static List<Employee> employeeList;

    @InjectMocks
    EmployeeController employeeController;

    @Mock
    EmployeeRepository employeeRepository;

    @Test
    public void testGetAllEmployees() throws Exception 

        Mockito.when(employeeRepository.findAll()).thenReturn(employeeList);
        assertNotNull(employeeController.getAllEmployees());
        mockMvc.perform(MockMvcRequestBuilders.get("/api/v1/employees"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    

如何验证 REST 控制器和其他层中的 CRUD 方法?

【问题讨论】:

你可能会询问它的主体作为响应,以检查它是否保存在数据库中。 好的,你知道如何使用 JUnit 和 Mockito 模拟 DAOlayer 和服务层吗? 在更真实的环境中,您可以使用@RunWith(SpringRunner.class) 在应用程序运行时测试您的服务,并使用@DataJpaTest 来检查是否保存了某个实体或其他什么。 谢谢,您还知道用于 DAO 层测试的 DBUnit 吗? 是的,你也可以使用它,但是查看你的代码,看起来你没有使用 DAO 对象。 【参考方案1】:

您可以使用@RunWith(MockitoJUnitRunner.class) 进行单元测试,并使用您的服务层 模拟您的DAO 层 组件。你不需要SpringRunner.class

Complete source code

    @RunWith(MockitoJUnitRunner.class)
    public class GatewayServiceImplTest 

        @Mock
        private GatewayRepository gatewayRepository;

        @InjectMocks
        private GatewayServiceImpl gatewayService;

        @Test
        public void create() 
            val gateway = GatewayFactory.create(10);
            when(gatewayRepository.save(gateway)).thenReturn(gateway);
            gatewayService.create(gateway);
        
    

您可以使用@DataJpaTest 进行集成测试 你的DAO 层

    @RunWith(SpringRunner.class)
    @DataJpaTest
    public class GatewayRepositoryIntegrationTest 

        @Autowired
        private TestEntityManager entityManager;

        @Autowired
        private GatewayRepository gatewayRepository;

        // write test cases here     
    

查看article 了解更多关于使用 Spring Boot

进行测试的详细信息

【讨论】:

以上是关于如何使用springboot编写rest控制器、服务和dao层的junit测试用例?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Rest控制器单元测试

如何从控制器访问 REST API 的所有可用路由?

Spring Boot REST 应用测试方法

Spring Boot 1.4 - REST API 测试

如果它是一个 Rest 控制器,如何确保 Spring boot 自动编组一个类的对象

如何从另一个Rest Controller调用Rest控制器