2015-07-12 154 views
-1

我是Junit測試用例的新手,有人可以請我用下面的。用戶密碼重置的Junit測試用例

我需要爲用戶密碼重置編寫一個junit測試用例。我不知道我該如何使用斷言這裏:

public @ResponseBody userInfo updatePassword(@RequestBody Map<String, String> userLookup, HttpServletRequest request) { 
     userInfo userInfo = new userInfo(); 
     try { 
      Users user = Service.getUserDetailsByUsername(userLookup.get("username")); 
      user.setPassword(userLookup.get("newPassword")); 
      Service.updateUserPw(user); 
      logger.debug("Password updated successfully"); 
     } catch (Exception ex) { 
      logger.debug("Error while updating user password!", ex); 
     } 
     return userInfo; 
    } 



    method:getUserDetailsByUsername returns a user with the username passed. 
    method:setPassword returns return void 
    method: updateUserPw returns void 
+0

你試圖斷言無效的返回方法,會要求你檢查這個鏈接http://stackoverflow.com/questions/1604381​​9/junit-testing-void-methods – Cleonjoys

+0

鑑於這是一個控制器,你試圖測試這通過彈簧mvc?意思是通過「http」?或者你想要一個單元測試,使HTTP離開它? – xenoterracide

+0

我可以離開它。 – fiddle

回答

0

要編寫一個JUnit測試,你必須首先創建和填寫需要調用的所有對象和參數:

@Test 
public void updatePasswordWithAValidPassword() 
{ 
    MyObject my=new MyObject(); 
    Map<String, String> userLookup=new HashMap<String, String>(); 
    userLookup.put("username", "..."); 
    userLookup.put("newPassword", "january209"); 
    HttpServletRequest request=null; // Fortunately, this method does not use the request parameter. 

二,執行電話:

userInfo user=my.updatePassword(userLookup, request); 

而在去年,使用Assert.assert *和Assert.fail檢查結果:

Assert.assertEquals("january209", user.getPassword()); 
} 

爲了達到較高的代碼覆蓋率,您應該爲您的方法在執行時可能採用的各種替代方法編寫測試。在這種情況下,應該有一個成功更改密碼的測試(上面的示例),以及在更改密碼時產生異常的其他測試(可能引入空密碼或低安全級別的密碼 - 太短,等等)。但是,不幸的是,在給定代碼的情況下,調用者(= JUnit測試者)知道何時發生異常並不容易,因爲調用者系統地捕獲並省略了該異常。

如果你想寫這樣一個測試,你必須首先refactorize你的方法去除catch (Exception e),讓異常傳播給調用者(假設有特殊例外每一種情況:PasswordTooShortExceptionInvalidNullPasswordException等),所以你可以從測試儀中捕獲它。

+0

嗨小Santi - 請你幫我理解你的代碼。謝謝提前。 – fiddle

+1

我上面的代碼是一個關於如何測試你的方法updatePassword的例子。您需要將其放入通常名爲* Test的類中,並使用JUnit運行它。 –

+0

我無法理解:userInfo user = my.updatePassword(userLookup,request); – fiddle