2015-11-23 23 views
0

我有單元測試的問題。以下是示例代碼片段。我嘲笑一個bean並注入@configuration類並使用mocked屬性來創建另一個bean。如何在SpringConfiguration中注入模擬bean來創建另一個bean。

在下面,如果我檢查,b.getSomething()返回默認值,如「」字符串,0爲int。等我沒有得到嘲弄的價值。任何想法如何做?

@Configuration 
class A{ 

    @Autowired B b; 

    @Bean 
    public SomeClass someBean(){ 

    SomeClass clas = new SomeClass(); 
    clas.setSomething(b.getSomething()); 
    return clas; 
    } 

} 



@ContextConfiguration(classes = { A.class}, loader = SpringockitoAnnotatedContextLoader.class) 
class ATest{ 

@ReplaceWithMock 
@Autowired 
B b; 

@Before 
public void setup(){ 
Mockito.when(b.getSomething()).thenReturn("ABC"); 
} 

} 
+1

總是問自己這種情況:你真的需要Spring來做這樣的單元測試嗎?例如,在你的測試的例子中,你可以(也應該)明確地實例化你想測試的類並注入模擬,而不是依靠Spring來做它 –

+0

如果你認爲你真的真的需要單元測試中的spring ,這個問題可能會給你一些想法(其中之一):http://stackoverflow.com/q/10906945/395202 –

回答

1

這是我創造我的嘲笑的方式。有一個返回模擬的Bean,並在需要時自動裝入它。

@Autowired 
MyClass myClassMock; 

@Bean 
public MyClass getMyClassMock(){ 
    MyClass mock = Mockito.mock(MyClass.class); 
    Mockito.when(mock.getSomething()).thenReturn("ABC"); 
    return mock; 
} 
+0

我不認爲這適用於我..你可以嘗試我的樣品上面與你的並讓我知道。 – Manoj

+0

使用@Profiles和你的上面的代碼,我已經實現了這個我猜。 – Manoj

相關問題