Ich versuche, meine Utils-Klasse zu testen. Einige der Methoden verwenden andere Klassenmethoden. Ich möchte den internen Methodengebrauch verspotten, damit der Test davon ausgeht, dass sie funktionieren (um es zu einem echten Unit Test zu machen, der die spezifische Methode testet).Mockito - Testmethode in einem Netz
Ich will 'buildUrl' testen Methode:
public static String buildUrl(String path, List<Pair> queryParams, DateFormat dateFormat) {
final StringBuilder url = new StringBuilder();
url.append(path);
if (queryParams != null && !queryParams.isEmpty()) {
// support (constant) query string in `path`, e.g. "/posts?draft=1"
String prefix = path.contains("?") ? "&" : "?";
for (Pair param : queryParams) {
if (param.getValue() != null) {
if (prefix != null) {
url.append(prefix);
prefix = null;
} else {
url.append("&");
}
String value = Utils.parameterToString(param.getValue(), dateFormat);
url.append(Utils.escapeString(param.getName())).append("=").append(Utils.escapeString(value));
}
}
}
return url.toString();
}
BuildUrl verwendet 'parameterToString' (und andere), die ich für den Test verspotten wollen. Also habe ich versucht, so etwas wie dieses:
@Test
public void testBuildUrl(){
Utils util = new Utils();
Utils utilSpy = Mockito.spy(util);
Mockito.when(utilSpy.parameterToString("value1",new RFC3339DateFormat())).thenReturn("value1");
List<Pair> queryParams = new ArrayList<Pair>();
queryParams.add(new Pair("key1","value1"));
String myUrl = utilSpy.buildUrl("this/is/my/path", queryParams, new RFC3339DateFormat());
assertEquals("this/is/my/path?key1=value1&key2=value2", myUrl);
}
Aber ich bin immer MissingMethodInvocationException
von Mockito. Also meine Frage ist eigentlich - wie man eine Methode vortäuscht, die innerhalb der getesteten Methode aufgerufen wurde, und was ist falsch mit meinem Test. Vielen Dank.