2013-07-23 2 views
-1

У меня есть класс Mainclass, который мне нужно проверить, который зависит от другого класса. Теперь я создаю макет для этого класса Как проверить недействительные методы с использованием EasyMockТестирование зависимости от недействительных методов с помощью EasyMock

MainClass{ 

    mainClassMethod(){ 
    dependencyClass.returnVoidMethod(); 
    //other code 
    } 
} 

TestClass{ 

    @Before 
    setUpMethod(){ 
     DependencyClass dependencyClassMock = EasyMock.createMock(DependencyClass.class); 
    } 

    @Test 
    testMainClassMethod(){ 
     EasyMock.expect(dependencyClassMock.returnVoidMethod()).andRetur //this is not working 
     dependencyClassMock.returnVoidMethod(); 
     EasyMock.expectLastCall().anyTimes(); //If I use this, it is invoking the method. 

    } 
} 
//My dependency class code 
DependencyClass implements ApplicationContextAware{ 
    private static ApplicationContext applicationContext; 
    private static final String AUTHENTICATION_MANAGER = "authenticationManagers"; 

    returnVoidMethod(){ 
     ProviderManager pm = (ProviderManager) getApplicationContext().getBean(AUTHENTICATION_MANAGER); //this is returning null 

    } 
    //othercode 
    //getters and setters of application context 
} 
+0

Ваш код не компилируется. Вы имеете в виду 'public void returnVoidMethod() {' – Gus

ответ

0

Как описано в Easymock Documentation вы не поставите метод внутри expect() (так как нет возврата). Вы можете просто вызвать издеваемый метод сам по себе, и если он находится в режиме «записи», то это подразумевается ожиданием.

dependencyClassMock.returnVoidMethod(); 

Если вам нужно выбросить исключение или сказать, метод можно назвать anyTimes(), вы можете использовать expectLastCall()

@Test 
public void testMainClassMethod(){ 

    dependencyClassMock.returnVoidMethod(); 
    EasyMock.expectLastCall().anyTimes(); 

    ... 
    //later to replay the mock 
    EasyMock.replay(dependencyClassMock); 

    //now this method is actually called 
    dependencyClassMock.returnVoidMethod(); 

} 

EDIT: Просто заметил, что вы не имеете dependencyClassMock в поле:

public class TestClass{ 
    DependencyClass dependencyClassMock 

    @Before 
    setUpMethod(){ 
     dependencyClassMock = EasyMock.createMock(DependencyClass.class); 
    } 

...//rest of class is as described above 
0

@dkatzel тест совершенно неправильно ..... вы вызываете вручную метод и вы убедитесь, если она называлась ... конечно это было! ... это не совсем так (мое мнение)

Лучшим способом (мое мнение) было бы расширить класс меход, который вы хотели бы протестировать, переопределить этот метод, а в теле просто ввести логическую переменную как флаг K теперь, если метод был вызван или нет .... вы даже не нужно использовать EasyMock

Пример

Class DependencyClass { 
public void returnVoidMethod() { 
    [.... content ...] 
} 
} 

Class A_test { 

@Test 
public void checkVoidMethodCalled() { 
    A_mod obj = new A_mod(); 
    mainClassMethod(); 
    assertTrue(obj.called); 
} 

Class A_mod extends DependencyClass { 
boolean called = false; 

@Override 
public void returnVoidMethod() { 
    called = true; 
} 
} 


} 

вы можете.

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