私はspringbootを学んでおり、簡単なspringbootアプリケーションを作成しました。私はユニットテストを実行するときにmongoDBを埋め込み、アプリケーションの残りの部分については外部mongoDBを使用します。ただし、埋め込み型の代わりに単体テストには外部mongoDBを使用します。 私はPOMに次の2つの依存関係があります。junitテストを作成するには、springbootアプリケーションで埋め込みmongoDBを使用しますか?
<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に制限するにはどうすればよいですか?
の可能性のある重複した[やる方法Springブートアプリケーションでの統合テストのためにEmbedded MongDBを構成しますか?](https://stackoverflow.com/questions/31568351/how-do-you-configure-embedded-mongdb-for-integration-testing-in-a-spring -boot-ap) –