2017-11-03 145 views
0

我的設置是Spring引導,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

這裏的根本問題是,userRepository.findUserByName()找到兩個實例 - 而不是一個 - 對於給定的FIRSTNAME1,它不能無意中選擇一個,因此它拋出這個異常。 userRepository.findUserByName()拋出異常,它是由JUnit拋出的而不是

您有一個存儲庫方法,它在按名稱查詢時返回單個用戶實例,這意味着「用戶名」有望成爲唯一值。但是,您的商店中有兩個記錄,其值爲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