Ich muss Unit-Test eine Methode, und ich möchte das Verhalten zu spotten, so dass ich den notwendigen Teil des Codes in der Methode testen kann.Abfangen von Objekt von der privaten Methode in einer öffentlichen Methode
Dafür möchte ich auf das Objekt zugreifen, das von einer privaten Methode innerhalb der Methode zurückgegeben wird, die ich versuche zu testen. Ich habe einen Beispielcode erstellt, um eine grundlegende Vorstellung davon zu geben, was ich erreichen möchte.
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);
}
}
Testklasse
@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");
}
Ich würde nicht genau sagen, dass das Verbessern der Methode die Codequalität verbessert, eher den "Get from db" -Teil richtig zu verspotten. – skomp
@Egor Ich bin mir nicht sicher, ob ich komplett folge, aber wie hilft mir die private Methode, einen Spion auf einem Benutzerobjekt zu erstellen? – bharathp