Spring Boot 嵌入式 mongo 测试
Springboot embedded mongo test
我正在尝试使用嵌入式 Mongo 测试一个简单的 Spring 启动应用程序,但我的存储库正在设置为 null
。谁能发现我遗漏了什么?
//控制器:
@RestController
public class MyController {
@Autowired
private MyRepository myRepo;
public MyController() {
}
@RequestMapping(method= RequestMethod.GET, value="/test")
public Iterable<Test> findAll() {
return myRepo.findAll();
}
}
//清空仓库界面
public interface MyRepository extends CrudRepository< Test, String> {
}
//Spring 引导应用程序
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
//集成测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyIntegrationTest {
MockMvc mockMvc;
MyController controller;
@Autowired
MyRepository myRepo;
@Before
public void setup() {
controller = new MyController();
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testing() throws Exception {
MockHttpServletRequestBuilder request = get("/test").contentType(APPLICATION_JSON);
HttpServletResponse response = mockMvc.perform(request).andReturn().getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
}
//gradle文件中的依赖:
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-mongodb')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.50.5"
testCompile group: 'cz.jirutka.spring', name: 'embedmongo-spring', version: '1.3.1'
}
myRepo.findAll()
是 null
- 这怎么设置?它可以直接使用嵌入式 mongo 吗?
在使用 MongoDB 时使用 MongoRepository
而不是 CrudRepository
。
您的集成测试用于验证系统的端到端行为,因此无需在您的测试中包含控制器或存储库 class。尝试使用以下内容:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyIntegrationTest {
@Autowired
MockMvc mockMvc;
@Test
public void testing() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/test"))
.andExpect(MockMvcResultMatchers.status().isOk())
}
}
我正在尝试使用嵌入式 Mongo 测试一个简单的 Spring 启动应用程序,但我的存储库正在设置为 null
。谁能发现我遗漏了什么?
//控制器:
@RestController
public class MyController {
@Autowired
private MyRepository myRepo;
public MyController() {
}
@RequestMapping(method= RequestMethod.GET, value="/test")
public Iterable<Test> findAll() {
return myRepo.findAll();
}
}
//清空仓库界面
public interface MyRepository extends CrudRepository< Test, String> {
}
//Spring 引导应用程序
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
//集成测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyIntegrationTest {
MockMvc mockMvc;
MyController controller;
@Autowired
MyRepository myRepo;
@Before
public void setup() {
controller = new MyController();
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testing() throws Exception {
MockHttpServletRequestBuilder request = get("/test").contentType(APPLICATION_JSON);
HttpServletResponse response = mockMvc.perform(request).andReturn().getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
}
//gradle文件中的依赖:
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-mongodb')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.50.5"
testCompile group: 'cz.jirutka.spring', name: 'embedmongo-spring', version: '1.3.1'
}
myRepo.findAll()
是 null
- 这怎么设置?它可以直接使用嵌入式 mongo 吗?
在使用 MongoDB 时使用
MongoRepository
而不是CrudRepository
。您的集成测试用于验证系统的端到端行为,因此无需在您的测试中包含控制器或存储库 class。尝试使用以下内容:
@RunWith(SpringRunner.class) @SpringBootTest public class MyIntegrationTest { @Autowired MockMvc mockMvc; @Test public void testing() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/test")) .andExpect(MockMvcResultMatchers.status().isOk()) } }