Встроенный тест монго Springboot

Я пытаюсь протестировать простое приложение SpringBoot с Embedded Mongo, но мой репозиторий устанавливается на 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 Boot

@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 - как это можно установить? Будет ли он работать из коробки со встроенным монго?


person maloney    schedule 29.04.2018    source источник


Ответы (1)


  • Используйте MongoRepository вместо CrudRepository при работе с MongoDB.

  • Ваш интеграционный тест предназначен для проверки сквозного поведения системы, поэтому нет необходимости включать контроллер или репозиторий в ваш тестовый класс. Попробуйте использовать следующее:

    @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()) 
        }
    }
    
person Luay Abdulraheem    schedule 30.04.2018