2013-07-23 88 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; 
} 
} 


} 

歡迎您。