0

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

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

4

1 回答 1

0

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

于 2016-08-16T21:22:00.350 回答