Tôi có một giao diện với các phương pháp sau đâyMockito lỗi với phương thức trả về tùy chọn <T>
public interface IRemoteStore {
<T> Optional<T> get(String cacheName, String key, String ... rest);
}
Các thể hiện của các lớp thực hiện giao diện được gọi là remoteStore.
Khi tôi thử điều này với Mockito và sử dụng phương pháp này khi:
Mockito.when(remoteStore.get("a", "b").thenReturn("lol");
tôi nhận được lỗi:
Cannot resolved the method 'thenReturn(java.lang.String)'
tôi nghĩ rằng nó đã làm với thực tế là nhận được trả về một thể hiện của lớp Tùy chọn nên tôi đã thử cách này:
Mockito.<Optional<String>>when(remoteStore.get("cache-name", "cache-key")).thenReturn
(Optional.of("lol"));
Nhưng, tôi gặp lỗi này thay vào đó:
when (Optional '<'String'>') in Mockito cannot be applied to (Optional'<'Object'>').
Lần duy nhất mà nó làm việc là với điều này:
String returnCacheValueString = "lol";
Optional<Object> returnCacheValue = Optional.of((Object) returnCacheValueString);
Mockito.<Optional<Object>>when(remotestore.get("cache-name", "cache-key")).thenReturn(returnCacheValue);
Nhưng trên trả về một thể hiện của Optional '< 'Object'>' và không bắt buộc '< 'String'>.
Tại sao tôi không thể trả lại một trường hợp Tùy chọn '<' Chuỗi '>' trực tiếp? Nếu có thể, tôi nên làm thế nào?
Bạn không thiếu khung trong đoạn mã đầu tiên? – npe
Ngoài ra, không nên nhầm lẫn 'java.util.Optional' với' com.google.common.base.Optional', vì sau này cần được nhập vào đây. – jckuester