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()) 
        }
    }