2017-10-09 12 views
2

私はプロトタイプBeanを作成するシングルトンSpring Beanを持っています。Mockito:javax.inject.Providerで作成したプロトタイプbeanをモックする方法は?

@Component 
public class MySingleton { 
    @Autowired 
    private javax.inject.Provider<MyPrototype> prototypeFactory; 

    public void doStuff() { 
     MyPrototype bean = prototypeFactory.get(); 
     bean.invoke(); 
    } 
} 

@Component 
@Scope("prototype") 
public class MyPrototype { 
    public void invoke() {} 
} 

は、今私はシングルトンのためのJUnitテストを作成したいと思います:それらはjavax.inject.Providerフィールドから取得され

@Mock 
MyPrototype prototype; 
@InjectMocks 
MySingleton sut; 
@Test 
public void testPrototype() { 
    sut.doStuff(); 
    verify(prototype, times(1)).invoke(); 
} 

しかし、それは当然のことながら、適切に設定しないシングルトンのProvider

これを行う方法はありますか? Prototypeインスタンスを作成するSingleton Factory Beanを作成しないでください。

または、シングルトンの場合は@Lookup -factoryメソッドを使用して優雅に可能でしょうか?私はそれをまだ見ていない。

答えて

2

は私がProviderことをスタブと、それは試験の各々の前に呼び出さ@Before方法使用prototypeMockたびに返すようになります。

@Mock 
private javax.inject.Provider<MyPrototype> prototypeFactoryStub; 

@Mock 
MyPrototype prototypeMock; 

@InjectMocks 
MySingleton sut; 

@Before 
public void init(){ 
    MockitoAnnotations.initMocks(this); // optional 

    when(prototypeFactoryStub.get()).thenReturn(prototypeMock); 
} 

@Test 
public void testPrototype() { 
    sut.doStuff(); 
    verify(prototypeMock, times(1)).invoke(); 
} 
+0

そう簡単に...ありがとうを。 – daniu

関連する問題