【发布时间】:2018-06-10 21:36:32
【问题描述】:
我正在学习 springboot 并创建了一个简单的 springboot 应用程序。我希望它在运行单元测试时使用嵌入式 mongoDB,而在应用程序的其余部分运行外部 mongoDB。但是,它使用外部 mongoDB 进行单元测试,而不是嵌入式的。 我的 POM 中有以下两个依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
我的属性文件有以下内容:
# MongoDB properties
mongo.db.name=person_testDB
mongo.db.url=localhost
#external Mongo url
spring.data.mongodb.uri=mongodb://localhost:27017/personDB
我有一个包含嵌入式 MongoDB 配置的配置文件 (MongoDBConfig.java):
@EnableMongoRepositories
public class MongoDBConfig {
@Value("${mongo.db.url}")
private String MONGO_DB_URL;
@Value("${mongo.db.name}")
private String MONGO_DB_NAME;
@Bean
public MongoTemplate mongoTemplate() {
MongoClient mongoClient = new MongoClient(MONGO_DB_URL);
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME);
return mongoTemplate;
}
}
以下是我的PersonService.java类:
@Service
public class PersonService {
private static final Logger logger = LoggerFactory.getLogger(PersonService.class);
@Autowired
MongoTemplate mongoTemplate;
public void savePerson(Person person) {
String name = person.getName();
String collectionName = name.substring(0, 1);
mongoTemplate.save(person, collectionName);
}
}
我对 PersonsService 类的单元测试如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {MongoDBConfig.class})
@SpringBootTest(classes = PersonService.class)
@DataMongoTest
public class PersonServiceTest {
@Autowired
PersonService personService;
MongodForTestsFactory factory;
MongoClient mongo;
@Before
public void setup() throws Exception {
factory = MongodForTestsFactory.with(Version.Main.PRODUCTION);
mongo = factory.newMongo();
}
@After
public void teardown() throws Exception {
if (factory != null)
factory.shutdown();
}
@Test
public void testSave(){
Person person = new Person("Bob Smith " , 25);
personService.savePerson(person);
}
}
它在外部 MongoDB 中正确创建集合名称和文档名称,这不是我想要的。如何将 unitTests 限制为嵌入式 Mongo?
【问题讨论】:
标签: java spring mongodb spring-boot junit