Я использую библиотеку Twilio, и в частности, я пытаюсь ввести макет TwilioRestClient при тестировании.Java: создание объекта «fit» с типом, в котором базовый класс не реализует интерфейс и не может быть унаследован от
Он не реализует никакого интерфейса. И я не могу добавить его.
Я не могу унаследовать от него, он делает вещи в конструкторе, я не поклонник.
Мне нужно иметь пару методов в макете, которые переопределяют или заменяют определенное поведение TwilioRestClient.
Как это сделать?
Я пробовал внутренние анонимные классы безрезультатно. Я пробовал подклассу, но, очевидно, не работает. Любой Java-гуру там?
Редактировать, версия twilio sdk;
public class TwilioRestClient {
/** The Constant VERSION. */
private static final String VERSION = "3.3.15";
Конструкторы:
/**
* Explcitly construct a TwilioRestClient with the given API credentials.
*
* @param accountSid
* the 34 character Account identifier (starting with 'AC'). This
* can be found on your Twilio dashboard page.
* @param authToken
* the 32 character AuthToken. This can be found on your Twilio
* dashboard page.
*
*/
public TwilioRestClient(String accountSid, String authToken) {
this(accountSid, authToken, null);
}
/**
* Explcitly construct a TwilioRestClient with the given API credentials and
* endpoint.
*
* @param accountSid
* the 34 character Account identifier (starting with 'AC'). This
* can be found on your Twilio dashboard page.
* @param authToken
* the 32 character AuthToken. This can be found on your Twilio
* dashboard page.
* @param endpoint
* the url of API endpoint you wish to use. (e.g. -
* 'https://api.twilio.com')
*/
public TwilioRestClient(String accountSid, String authToken, String endpoint) {
validateAccountSid(accountSid);
validateAuthToken(authToken);
this.accountSid = accountSid;
this.authToken = authToken;
if ((endpoint != null) && (!endpoint.equals(""))) {
this.endpoint = endpoint;
}
//Grab the proper connection manager, based on runtime environment
ClientConnectionManager mgr = null;
try {
Class.forName("com.google.appengine.api.urlfetch.HTTPRequest");
mgr = new AppEngineClientConnectionManager();
} catch (ClassNotFoundException e) {
//Not GAE
mgr = new ThreadSafeClientConnManager();
((ThreadSafeClientConnManager) mgr).setDefaultMaxPerRoute(10);
}
setHttpclient(new DefaultHttpClient(mgr));
httpclient.getParams().setParameter("http.protocol.version",
HttpVersion.HTTP_1_1);
httpclient.getParams().setParameter("http.socket.timeout",
new Integer(CONNECTION_TIMEOUT));
httpclient.getParams().setParameter("http.connection.timeout",
new Integer(CONNECTION_TIMEOUT));
httpclient.getParams().setParameter("http.protocol.content-charset",
"UTF-8");
this.authAccount = new Account(this);
this.authAccount.setSid(this.accountSid);
this.authAccount.setAuthToken(this.authToken);
}
По определению вы не сможете _override_ любых методов без наследования. – DannyMo
Вы правы. Я намерен проверить, когда то, что я тестирую, вызывает эти методы, я решаю в тесте, что методы вернут. В принципе, просто инъекционное поведение, как-то. – Phil
Попробуйте jmockit для переопределения методов. – Jayan