1
private ServiceImpl() {
    // TODO Auto-generated constructor stub

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

このメソッドをモックしたいのですが、これは springContext を初期化するプライベート コンストラクターです。Bean とそのクラス名を指定した beans.xml を使用して、powermockito テスト ケースで beanfactory を設定しています。それでも、このメソッドは reManager のインスタンスを取得できません。

4

2 に答える 2

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...
    }
}

静的な動作を検証する方法の詳細については、こちらをご覧ください。

または...デザインを変更して、依存関係がテスト対象のクラスに渡されるようにします。例:

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

    ... etc...
}

そうすれば、PowerMockは不要になり、テストが簡単になり、クラス間の結合が少なくなります。

于 2013-03-18T14:40:38.873 に答える
1

テストの 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 は、アプリケーション コンテキストを定義するファイルです。私が正しく知っていると思うことができる最高のリンクはこれです

春のテストのサポート

于 2013-03-18T14:28:16.250 に答える