私はmongodbで少し演奏する小さな勉強プロジェクトを書いた。私はSpringデータを使ってMongo Repositoryを取得していました。 RestControllerを作成し、MongoRepositoryをService(別のクラス)を使ってmongodbから情報を取り出し、ブラウザにレンダリングするのはかなり簡単でした。春のデータMongoDBテスト
public interface PersonRepository extends MongoRepository<Person, Integer> {
List<Person> findByName(String name);
@Query("{'name':{$regex:?0}}")
List<Person> findByNameLike(String nameLike);
//the rest of methods
}
は今、私は私のビジネス・ロジックをテストすることを決定し、以下のクラスを作成しました:
としてAppConfig.class
が見え
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfig.class})
public class TestMongo {
private static final Logger LOG = LoggerFactory.getLogger(TestMongo.class);
@Autowired
private PersonRepository personRepository;
@Before
public void setUp() {
Technology technology1 = new Technology("Java-7");
Technology technology2 = new Technology("Java-8");
Technology technology3 = new Technology("Hibernate");
Technology technology4 = new Technology("MyBatis");
Technology technology5 = new Technology("Spring Data");
Project project1 = new Project(1, "POINT", Arrays.asList(technology1, technology3));
Project project2 = new Project(2, "Forecast", Arrays.asList(technology1, technology4));
Project project3 = new Project(3, "CPM", Arrays.asList(technology2, technology5));
Person person1 = new Person(1, "Alex", 27, Arrays.asList(project1, project3));
Person person2 = new Person(2, "Ivan", 26, Arrays.asList(project2, project3));
Person person3 = new Person(3, "Andrii", 31, Arrays.asList(project1));
personRepository.save(Arrays.asList(person1, person2, person3));
}
@Test
public void count() {
List<Person> all = personRepository.findAll();
LOG.info("There are " + all.size() + " person(s) in database");
assertThat(all.size(), equalTo(3));
}
@Test
public void findByName() {
List<Person> personList = personRepository.findByName("Ivan");
LOG.info("*******Find by name********");
LOG.info("personList {}", personList);
LOG.info("***************************");
assertThat(personList, hasSize(1));
}
//another test methods
@After
public void shutDown() {
personRepository.deleteAll();
}
}
:私は実際にはしないでください。
@Configuration
@EnableMongoRepositories
@ComponentScan
public class AppConfig {
@Bean
public MongoClient mongoClient() {
return new MongoClient("localhost", 27017);
}
@Bean
public MongoTemplate mongoTemplate() {
return new MongoTemplate(mongoClient(),"my-mongo");
}
}
そして今、私の問題私は自分のデータを保存する同じデータベースでいくつかのテストを実行したいと思っています。さらに、私は重要なメソッドpersonRepository.deleteAll()
を持っています。その後、すべてのデータが消えます。 埋め込みmongodbを解決策として見つけましたが、一旦それを私のpom.xml
に追加すると、インストールされたデータベースはもう表示されません。 質問は、インストールされたmongodbと同じマシンにmongodbが組み込まれていることが可能かどうか、また、私のMongoRepositoryをprodデータを変更せずにテストする方法ではないかどうかです。