Как издеваться над статической переменной в Java с помощью Jmock

StackOverflow https://stackoverflow.com/questions/1393029

Вопрос

У меня есть проблема с модульным тестированием, где у класса есть статическая переменная, которая хочет загрузить 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;

    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top