4

単体テストを試みているクラスがあります。私はMockitoを使用してテストしようとしています.Mockitoでスプリングインジェクションを解決するために、SpringockitoとSpringockito-annotationsを使用しています。

@ContextConfiguration(loader = SpringockitoContextLoader.class,
        locations = {"classpath:testApplication-context-EU.xml"})
public class RelatedSearchToHotUrlProcessorTest extends AbstractJUnit4SpringContextTests {

    @Autowired
    RelatedSearchToHotUrlProcessor processor;

    @ReplaceWithMock
    private RestOperations restTemplate;


    @Test
    public void testGetCategoryFromIdWithNoStoredAlias() {
        Taxonomy mockTaxonomy = mock(Taxonomy.class, RETURNS_DEEP_STUBS);
        GraphType.Node mockNode = mock(GraphType.Node.class);
        when(restTemplate.getForObject(anyString(), eq(Taxonomy.class))).thenReturn(mockTaxonomy);
        when(mockTaxonomy
                .getRev()
                .get(0)
                .getCountry()
                .get(0)
                .getGraph()
                .getNodeOrAtom()
                .get(0)).thenReturn(mockNode);
        when(mockNode.getAlias()).thenReturn("mockalias");
        String categoryAlias = processor.getCategoryAliasFromId(13130L);
        assertEquals("mockalias", categoryAlias);
    }
}

と 行を削除する@ReplaceWithMockprivate RestOperations restTemplate、正しい呼び出しが行われ、値が正しいと検証されます。ただし、プロセッサ内で RestOperations オブジェクトをモックしたいのですが、@ReplaceWithMock を使用すると、restTemplate 変数が null になり、失敗します。このメンバーを分離してモックする方法を見つけることができませんでした。

4

1 に答える 1

2

同様の問題がありましたが、 @WrapWithSpy または @ReplaceWithMock で注釈を付けるだけでは不十分であることがわかりました。つまり、テスト クラスのフィールドが null でした。Arasu のコメントに従って springockito アノテーションに加えて @Autowired アノテーションを追加すると、問題が修正されました - 奇妙に見えますが...

@Autowired
@WrapWithSpy
private SomeBean someBean;
于 2012-10-29T12:40:23.960 に答える