Как издеваться над статической переменной в Java с помощью Jmock
-
21-09-2019 - |
Вопрос
У меня есть проблема с модульным тестированием, где у класса есть статическая переменная, которая хочет загрузить CTX приложения Spring.
Этот класс не выходит из фабрики бобов, и я не могу изменить этот факт.
static ApplicationContext applicationContext = ...;
Это работает нормально, но трудно Jmock, или, по крайней мере, я не знаю ни одного, и пока я не смогу, чтобы CTX запустил CTX. Не идеально подходит для ситуации с модульным испытанием.
Есть ли работа, которую кто -нибудь знает? У меня есть возможность изменить статическую переменную на все, что я хочу ..
Спасибо.
Решение
Решил это сам.
В конце было действительно просто. Справа нужно обернуть мою статику в класс, который я тогда мог бы издеваться.
public class ApplicationContextHolder implements ApplicationContextHoldable {
protected static ApplicationContext applicationContext = ...;
@Override
public ApplicationContext getApplicationContext() {
return ApplicationContextHolder.applicationContext;
}
}
Другие советы
Хороший. Ирония в том, что единственная вещь, в которой хороша весна, это управление синглтонами, поэтому не должно быть необходимости в статических переменных :)
Вы можете использовать API на основе отражения Jmock для установки частных / статических полей
import static mockit.Deencapsulation.setField;
//Test method
public void testSample {
setField(Sample.class,"isPrivate",true);
setField(Sample.class,"isStatic",true);
}
private class Sample {
private boolean isPrivate = false;
private boolean isStatic = false;
}