2017-11-03 3 views
0

내 설정은 봄 부팅, Neo4J, Junit입니다. 이름이 같지만 사용자 이름이 다른 두 명의 사용자가 있는지 테스트하려고합니다 (데이터베이스에 두 개의 사용자 이름이 있음). 나는 이것을 시도하고있다 :Junit : neo4j 쿼리의 여러 예상 결과를 테스트하는 방법은 무엇입니까?

오류 발생
@Test 
    public void findUsersByName(){ 
     Assert.assertEquals(FIRSTNAME1, userRepository.findUserByName(FIRSTNAME1).getName()); 
    } 

:

java.lang.RuntimeException: Result not of expected size. Expected 1 row but found 2 

가 어떻게 JUnit을 사용하여 여러 객체에 대해 테스트 할 수 있습니까? 두 명의 사용자가 모두 동일한 FIRSTNAME1을 (를) 가진다고 어떻게 선언합니까?

답변

2

여기서 근본적인 문제는 주어진 FIRSTNAME1에 대해 userRepository.findUserByName()이 두 인스턴스 (하나가 아니라)를 찾음으로써 abitrarily 하나를 선택할 수 없으므로이 예외를 throw합니다. 예외는 userRepository.findUserByName()에 의해 throw되고 있습니다. 이 아니고,이 JUnit에 의해 throw됩니다.

이름으로 쿼리 할 때 단일 인스턴스의 인스턴스를 반환하는 리포 지 토리 메소드가 있는데 이는 '사용자 이름'이 고유 한 값일 것으로 예상 함을 의미합니다. 그러나 상점에 두 개의 레코드가 있는데이 값은 FIRSTNAME1입니다.이 값은이 기대치가 적용되고 있지 않음을 나타냅니다.

'사용자 이름'이 고유해야한다는 기대가 유효한 경우 저장소에 적용하여 다른 사람이 같은 이름의 두 레코드를 작성하지 못하도록합니다. 그러면 과 같이 작동합니다. '사용자 이름'고유 것이라는 기대가 유효하지 않은 경우

는 저장소 방법은 ... 같은 테스트는 다음과 같을 수있는 경우

List<User> findUsersByName(String name) 

...해야한다 :

List<User> users = userRepository.findUsersByName(FIRSTNAME1); 
Assert.assertEquals(2, users.size()); 
for (User user : users) { 
    Assert.assertEquals(FIRSTNAME1, user.getName()); 
} 
+0

감사합니다. 나는 당신의 첫번째 단락을 위해 해결할 것이지만 당신의 남은 대답은 도움이되는 것 이상의 것이었다. – PaulB