Модульное тестирование Spring Boot MongoRepository с использованием предустановленной MongoDB

У меня есть обычное приложение Spring Boot (1.3.2) с MongoDB, использующее MongoRepository.

Я хотел бы написать интеграционный тест для одной из моих конечных точек, которая получает данные из MongoDB. Насколько я вижу из выпуск Spring Boot 1.3 Примечания Spring имеет автоматическую настройку для встроенной MongoDB (de.flapdoodle.embed.mongo ). Однако я не могу понять из документации Spring и флапдудла, как написать интеграционный тест, который будет использовать уже установленную версию MongoDB в моей файловой системе.

Пока мой интеграционный тест выглядит так:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(Application.class) // my application class
@WebAppConfiguration
public class IntegrationTest {

    @Autowired
    private MyRepository myRepository;

    @Before
    public void setup() {
        myRepository.save(new MyEntity());
    }

    @Test
    public void test() {
        // here I will fire requests against the endpoint
    }
}

Я добавил две зависимости с областью действия test: spring-boot-starter-test и de.flapdoodle.embed:de.flapdoodle.embed.mongo. Итак, когда я запускаю тест, я вижу, что флапдудл пытается загрузить версию MongoDB, но терпит неудачу, так как я нахожусь за прокси. Но я не хочу загружать какие-либо версии, я хочу, чтобы он использовал мою локально установленную MongoDB. Можно ли сделать это?


person Maksim Sorokin    schedule 30.05.2016    source источник
comment
ты сделал с этим.   -  person devanathan    schedule 05.08.2016


Ответы (1)


Если вы хотите использовать локально установленную MongoDB (не рекомендуется, поскольку тогда тесты зависят от конкретной БД, которая может перейти в грязное состояние), вам не следует использовать встроенную MongoDB.

Я считаю, что эта конфигурация будет делать то, о чем вы просите (кажется, работает в моем тесте Spring Boot 1.3.5):

import java.net.UnknownHostException;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import com.mongodb.MongoClient;

@EnableAutoConfiguration(exclude = MongoAutoConfiguration.class)
@Configuration
public class TestConfig
{
    @Primary
    @Bean
    MongoClient mongoClient()
    {
        try
        {
            return new MongoClient("localhost", 27017);
        }
        catch (UnknownHostException e)
        {
            throw new RuntimeException(e);
        }
    }
}

Однако я подозреваю, что вам лучше правильно настроить прокси и использовать встроенную mongoDB в своих тестах. См. этот ответ для подсказки, как это сделать.

person Kyrstellaine    schedule 16.08.2016