私はUtilsクラスをテストしようとしています。いくつかのメソッドは他のクラスメソッドを使用します。私はテストが彼らが(特定の方法をテストする実際のユニットテストにするために)動作すると仮定するように、内部メソッドを嘲笑したい。メソッドの中のMockito - テストメソッド
私は 'buildUrl' メソッドをテストしたい:
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は、私がテスト用にモックとしたい 'parameterToString'(およびその他)を使用します。だから私はこのような何か試してみました:
@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);
}
をしかし、私はMockitoからMissingMethodInvocationException
を取得しています。 私の質問は実際には - テストされたメソッドの中で呼び出されたメソッドを模擬する方法と私のテストで何が問題なのかです。ありがとう。