У меня есть абстрактный класс BaseTemplate
и несколько классов, расширяющих его. В одном конкретном классе (SmsTemplate extends BaseTemplate
) у нас есть переменная Gson
. У нас есть та же переменная (Gson
) в абстрактном классе.Как ввести переменную в абстрактный класс при модульном тестировании подкласса?
В то время как единица измерения tesing конкретного класса, методы в абстрактном классе вызывается из конкретного класса. В моем модульном тесте я использую Whitebox.setInternalState(smsTemplateObj, gsonObj);
, чтобы ввести объект Gson в частные члены SmsTemplate
и BaseTemplate
, но Gson вводится только в подкласс. В абстрактном классе его NULL
, что означает не введенный. Ниже приведена реализация.
Может кто-нибудь рассказать, как ввести объект Gson в абстрактный класс?
abstract class BaseTemplate{
private Gson gson;//Here its not getting injected
protected String getContent(Content content){
return gson.toJson(content); // ERROR - gson here throws NPE as its not injected
}
}
class SmsTemplate extends BaseTemplate{
private Gson gson;//Here its getting injected
public String processTemplate(Content content){
String strContent = getContent(content);
...
...
gson.fromJson(strContent, Template.class);
}
}
Сделать поле абстрактного класса защищаемого и удалить удалить поле из подкласса. – Stefan
@Stefan - Ahh ... проблема в том, что объект Gson не используется во всех конкретных классах. – whoami
Зачем вам нужна переменная gson в абстрактном классе И подкласс? – bryce