2014-01-14 3 views
0

Я новичок в модульном тестировании.Mocking class, Java

Я хочу проверить MyClass. Приложение работает на Apache Tomcat.

Классы:

MyClass extends Report { 
    public MyClass() { 
     super(); //exception in JUnit 
    } 

    public void doSomething() { 
     GetDataFromSQL(params); // I want to test this 
    } 
} 

Report { 
    public Report(){ 
     //this throws null pointer exception in my JUnit tests: 
     ServletContext sc = EnviromentWrapper.getServletContext(); 
    } 

    //necessary method for MyClass. This method uses also other methods in this class. 
    public AnyData GetDataFromSQL(params){} 
} 

Не могли бы вы быстро объяснить мне, как издеваться отчет - это сложный класс, и я хочу, чтобы сохранить исходный код из метода GetDataFromSQL.

Возможно, мне нужно что-то сделать с Tomcat?

ответ

2

Связывание не-веб-артефакта с веб-слоем - это плохая идея.

Ваш отчет не должен знать о контексте сервлета вообще.

Mock EnvironmentWrapper#getServletContext(), чтобы вернуть что-то полезное и/или макет ServletContext, чтобы предоставить то, что вам нужно.

+0

Я хочу протестировать MyClass, а не Report (не мой класс) – liquide

+0

@liquide Затем выложите отчет с помощью любой из насмешливых библиотек, таких как Mockito, EasyMock и т. Д. Вы специально заявили, что хотите * сохранить * сложный код " в 'GetDataFromSQL', который трудно интерпретировать без дополнительной информации. –

+1

@DaveNewton - Я думаю, что это «статический» метод. Это немного усложняет ситуацию, вы можете использовать power mock для настройки возвращаемых значений, а затем «воспроизводить» их, но обычное издевательство не поможет. –