2017-06-16 67 views
1

實例化我有一個類,它使用new jdbcTemplate(dataSource)創建它自己的jdbcTemplate,並在需要時使用新的NameParameterJdbcTemplate(jdbcTemplate)創建它自己的NamedParameterJdbcTemplate。我如何使用Mockito進行設置,以便在單元測試模板時使用模擬模板來控制返回值?模擬jdbcTemplate由類

+0

你已經在使用Spring,爲什麼不注入NamedParameterJdbcTemplate而不是創建一個新實例? –

回答

0

您可以創建這將創建這些對象,然後用@Spy功能使用嘲笑他們特殊的封裝水平的方法:

1)創建專門的方法:

public class MyClass{ 

    private Datasource ds; 

    public void methodUnderTest(){ 
     JdbcTemplate template = getTemplateInstance(ds); 

     ... 
    } 

    JdbcTemplate getTemplateInstance(Datasource ds){ 
     return new JdbcTemplate(ds); 
    } 
} 

2)間諜類和模擬實例創建方法:

public class MyClassTest{ 

    @Spy 
    @InjectMocks 
    private MyClass myClassSpy; 

    @Mock 
    private Datasource dsMock; 

    @Mock 
    private JdbcTemplate templateMock; 

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

    @Test 
    public void test(){ 
      // Arrange 
      doReturn(templateMock).when(myClassSpy).getTemplateInstance(dsMock); 

      // Act and Assert ... 
    } 
}