我需要單元測試一個方法,並且我想嘲笑這個行爲,以便我可以在方法中測試代碼的必要部分。在公共方法中偵聽私有方法返回的對象
爲此,我想訪問由我嘗試測試的方法內的私有方法返回的對象。我創建了一個示例代碼來給出我想要實現的基本概念。
Main.class
Class Main {
public String getUserName(String userId) {
User user = null;
user = getUser(userId);
if(user.getName().equals("Stack")) {
throw new CustomException("StackOverflow");
}
return user.getName();
}
private User getUser(String userId) {
// find the user details in database
String name = ""; // Get from db
String address = ""; // Get from db
return new User(name, address);
}
}
測試類
@Test (expected = CustomException.class)
public void getUserName_UserId_ThrowsException() {
Main main = new Main();
// I need to access the user object returned by getUser(userId)
// and spy it, so that when user.getName() is called it returns Stack
main.getUserName("124");
}
我不會說確保提供的方法是提高代碼質量,而是正確地模擬「從數據庫中獲取」部分。 – skomp
@Egor我不確定我是否完全遵循,但是如何模擬私有方法幫助我在用戶對象上創建間諜? – bharathp