繁体   English   中英

使用预装的MongoDB进行Spring Boot MongoRepository单元测试

[英]Spring Boot MongoRepository unit testing using pre-installed MongoDB

我使用MongoRepository在MongoDB上有一个常规的Spring Boot应用程序(1.3.2)。

我想为我的一个端点编写一个集成测试,以从MongoDB中获取数据。 据我从Spring Boot 1.3发行说明中看到,Spring具有嵌入式MongoDBde.flapdoodle.embed.mongo )的自动配置。 但是,我无法从Spring和flappoodle文档中找到如何编写将在文件系统上使用已经安装的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-testde.flapdoodle.embed:de.flapdoodle.embed.mongo 因此,当我运行测试时,我可以看到flappoodle尝试下载MongoDB的版本,但是由于我落后于代理而失败。 但是我不想下载任何版本,我希望它使用本地安装的MongoDB。 是否有可能做到这一点?

如果要使用本地安装的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。 有关如何执行此操作的提示,请参见此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM