我从不为我的其他控制器和服务编写测试。 我已阅读官方文档,如何在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中创建新用户?
答案 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项目,然后:
将以下依赖项添加到 pom.xml
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
将 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