[英]Mockito or Embedded Mongo for unit testing spring mongorepository
[英]Spring Boot MongoRepository unit testing using pre-installed MongoDB
我使用MongoRepository
在MongoDB上有一个常规的Spring Boot应用程序(1.3.2)。
我想为我的一个端点编写一个集成测试,以从MongoDB中获取数据。 据我从Spring Boot 1.3发行说明中看到,Spring具有嵌入式MongoDB ( de.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-test
和de.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);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.