2017-06-16 62 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 ... 
    } 
}