Я пытаюсь написать тест юнита для одного из моих классов. Дизайн не был сделан мной; это довольно старое приложение, java7, struts1 и clydeDB.Как я могу создать экземпляр объекта в jUnit, который должен рефлексивно создать другой объект внутри его конструктора?
Классы настроены так: ProcessObj
, IProcessObj
(интерфейс), ProcessHome
,
public class ProcessHome {
private static ProcessHome instance = new ProcessHome();
//default Constructor
private ProcessHome() {
}
public static ProcessHome getInstance() {
return instance;
}
public IProcessObj getProcessObj() throws POException {
return ProcessObj.getInstance(); //this is below
}
}
public class ProcessObj implements IProcessObj {
// instance
private static IProcessObj instance;
...
//constuctor
private ProcessObj() throws POException {
init();
}
static IProcessObj getInstance() throws POException {
if (instance == null) {
instance = new ProcessObj();
}
return instance;
}
//jUnit test setUp
@Before
public void setUp() throws Exception {
public static IProcessObj iPO;
iPAO = ProcessHome.getInstance()
.ProcessObj();
Constructor<ProcessObj> pa = ProcessObj.class
.getDeclaredConstructor();
pa.setAccessible(true);
iPO = pa.newInstance();`
...
Он отлично работает до сюда, но потом в ProcessObj
, метод инициализации проходит через другой набор классов, которые настроены точно так же, как объекты процесса, которые выше, для уровня доступа к данным.
Есть ли способ создать полезный экземпляр объекта процесса? Может кто-нибудь объяснить мне, что именно здесь происходит? Я продолжаю получать InvocationTargetException
.
InvocationTargetException происходит при вызове 'newInstance', верно? Это означает, что конструктор (и, как вы предполагаете, метод 'init') throw и Exception (который вы можете найти, вызвав' getCause' в InvocationTargetException. Поскольку содержимое 'init' недоступно для нас, вам придется отслеживать эту причину. Исключение. – CoronA