2017-02-12 12 views
1

私は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データを変更せずにテストする方法ではないかどうかです。

答えて

0

私が欠けていたものを見つけように見えます:

<dependency> 
    <groupId>de.flapdoodle.embed</groupId> 
    <artifactId>de.flapdoodle.embed.mongo</artifactId> 
    <version>1.50.5</version> 
    <scope>test</scope> 
</dependency> 

は単に私はまだPROD用にインストールするMongoDBを使用していながら、スコープのテストは、テストだけのための私の組み込みにMongoDBを起動している追加。

関連する問題