2013-03-18 140 views
1
private ServiceImpl() { 
    // TODO Auto-generated constructor stub 

    reMgr = (ReManager) SpringContext.getBean("reManager"); 

我想模擬這個方法,這是一個私有構造函數,它正在初始化springContext。我使用beans.xml來設置beanfactory,通過我的powermockito測試用例,我已經指定了bean和它的類名。仍然這種方法無法獲得reManager的實例。如何模擬springcontext?

+1

你想達到什麼目的?因爲如果你想獲得一個Spring bean的實例來在測試中使用它,Spring提供了測試支持,可以讓你做到這一點。您可以通過AbstractJUnit4SpringContextTests類和@ContextConfiguration註釋在測試中創建一個Spring上下文。我可以爲你提供一個例子,如果這你肯定要找 – pvm14 2013-03-18 14:08:57

+0

。我正在尋找使用powermockito進行測試。你能舉個例子嗎? – user2181531 2013-03-18 14:16:39

+0

@ pvm14:如果你也給我一些有用的鏈接,那就太好了 – user2181531 2013-03-18 14:20:11

回答

1

如果你想做的是在你的一個測試中創建一個Spring bean的實例,你不需要使用powermockito。你可以做這樣的事情

@ContextConfiguration(locations = "/beans.xml") 
public class YourTestJUnit4ContextTest extends AbstractJUnit4SpringContextTests { 

private ReManager reManager; 

@Before 
public void init() { 
    reManager= (ReManager) applicationContext.getBean("reManager"); 
} 

@Test 
public void testReManager() { 
    // Write here the code for what you wnat to test 
} 

}

beans.xml文件中,可以定義你的應用程序上下文文件。我能想到的最好的鏈接權所知道的是

Spring Testing Support

+0

您可以放棄'@ Before' - 因爲這將在每個測試中執行 - 並且只需在'reManager'字段上粘貼'@ Autowired'。 :-) – Jonathan 2013-03-18 14:51:15

+0

是的,你是絕對正確的我只是想用問題中出現的元素給出答案 – pvm14 2013-03-18 14:57:42

2

原諒我,如果我誤解的東西,但如果你使用PowerMockito不能做你的線沿線的東西:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SpringContext.class) 
public FooTest {  
    @Test 
    public void foo() { 
     final ReManager manager = Mockito.mock(ReManager.class); 

     PowerMockito.mockStatic(SpringContext.class); 
     Mockito.when(SpringContext.getBean("reManager")).thenReturn(manager); 

     ... etc... 
    } 
} 

查看更多信息here關於如何驗證靜態行爲。

或者......我會改變設計,使你的依賴是傳遞給類測試,如:

@Test 
public void foo() { 
    final ReManager manager = Mockito.mock(ReManager.class); 
    final ServiceImpl service = new ServiceImpl(manager); 

    ... etc... 
} 

那就沒有必要PowerMock,你的測試變得更容易,有少之間的耦合類。

+0

據我所知,類'SpringContext'不存在,並且等價的右邊的ApplicationContext沒有靜態'getBean'方法。那麼告訴我你需要什麼靜態測試? ;-) – pvm14 2013-03-18 14:54:05

+0

@ pvm14我假設'SpringContext'是一個由提問者創建的類...我個人會讓Spring爲我注入所有的依賴關係。原則上我同意你的意見! :-) – Jonathan 2013-03-18 14:58:21

+0

你贏了;-)。像往常一樣,你的絕對正確,我的閱讀障礙再次愚弄我,我沒有注意到在這個問題 – pvm14 2013-03-18 15:09:17