2009-09-08 4 views
0

У меня проблема с тестированием модуля, когда класс имеет статическую переменную, которая хочет загрузить Spring Ctx.Как издеваться над статической переменной в java с помощью JMock

Этот класс НЕ ВЫХОДИТ ИЗ БИН-ФАЙЛЫ, и я не могу изменить этот факт.

static ApplicationContext applicationContext = ...; 

Это прекрасно работает, но трудно JMock, или по крайней мере я не знаю, как и до тех пор, я могу весна Ctx хочет, чтобы начать. Не идеально подходит для единичной тестовой ситуации.

Есть ли работа вокруг, которую кто-либо знает? У меня есть возможность изменить статическую переменную на все, что я хочу.

Спасибо.

ответ

1

Решил это сам.

Было действительно просто в конце. Justed нужно обернуть мою статику в классе, который я мог бы затем высмеять.

public class ApplicationContextHolder implements ApplicationContextHoldable { 

    protected static ApplicationContext applicationContext = ...; 

    @Override 
    public ApplicationContext getApplicationContext() { 
     return ApplicationContextHolder.applicationContext; 
    } 

} 
0

Nice. Ирония заключается в том, что одна вещь, что весна хорошо управляет синглтонов, так что не должно быть необходимости статических переменных :)

+0

Правда, но в реальном мире у вас не всегда есть этот вариант :) – JamesC

0

Вы можете использовать отражение на основе JMock API, чтобы установить личные/статические поля

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; 

    } 
Смежные вопросы