Spring启动,测试crud存储库

时间:2017-08-02 05:22:47

标签: java testing spring-boot

我从不为我的其他控制器和服务编写测试。 我已阅读官方文档,如何在spring boot中编写集成测试。 例如,我有一个Rest Controller类

@RestController
@RequestMapping(value = "users")
public class SvcUser {

    @RequestMapping(value = "user", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public ResponseEntity<String> registrateUser(@RequestBody Registration registrate) throws TimeoutException, SocketTimeoutException  {

        final String result = userService.registrateUser(registrate.getPhoneCode(), registrate.getPhoneNumber(), registrate.getOsType());
        return ResponseEntity.ok(result);
    }

在userServiceClass中,我确实像这样做了

  registrateUser(String args ...){
         Users user = new User();
         user.setSmth(smth);
         userRepository.save(user)

   }

我的集成测试

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,classes = GmoikaApiApplication.class)

    public class GmoikaApiApplicationTests {

        private MockMvc mockMvc;
        @Autowired
        private WebApplicationContext wac;
        @Before
        public void setUp(){
            this.mockMvc = webAppContextSetup(wac).build();
        }

        @Test
        public void firstTest() throws Exception {
            mockMvc.perform(post("/users/user")
                    .content("my new user"))
                    .andExpect(status().isOk())
                    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
                    .andExpect(jsonPath("$.error",is(0)))
                    .andDo(print())
                    .andReturn();        
        }

这很好用,但我的数据库中有新用户。我不想仅仅因为测试而在生产中创建假用户。我的问题是如何避免在集成测试中的db中创建新用户?

2 个答案:

答案 0 :(得分:0)

您需要在spring框架中创建配置文件,第一个用于您的标准应用程序和数据库配置,另一个用于您的测试应用程序。对于测试,您应该使用h2database。 H2数据库是内存数据库,所以你不需要安装任何h2数据库,只需在项目中添加h2database的依赖项

    com.h2database     H2     1.4.194

也在您的测试资料中

jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1

hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.hbm2ddl.auto=create

答案 1 :(得分:0)

我假设您的项目是Maven项目,然后:

  1. 将以下依赖项添加到 pom.xml

    <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency>

  2. src / test / resources / config 文件 application.properties 添加到包含以下内容的文件中

    spring.datasource.url=jdbc:h2:mem:mytestdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.database=H2 spring.jpa.open-in-view=false spring.jpa.show-sql=false spring.jpa.hibernate.ddl-auto=create-drop