2013-07-23 41 views
-1

我有一个Mainclass,我需要测试哪一个依赖于其他类。 现在我创建一个模拟该类 如何使用EasyMock的使用EasyMock测试void方法依赖关系

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

测试作为描述的void方法的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(); 

} 

编辑:只注意到你没有dependencyClassMock的领域:

public class TestClass{ 
    DependencyClass dependencyClassMock 

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

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

@dkatzel 测试是完全错误的.....你手动调用方法与你验证,如果它被称为... ...当然它是! ...这是不正确的方式(我的意见)

更好的方法(我的意见)将扩大你想测试的mehod类,重写该方法,并在体内只是把一个布尔变量作为标志了解,如果该方法被调用,还是没有....你甚至不需要使用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; 
} 
} 


} 

欢迎您。