我有一个类,在 void 方法内创建一个新实例
public class BaseDao {
protected void setDataSource(DataSource dataSource) {
this.defaultTemplate = new JdbcTemplate(dataSource);
}
}
现在在我的 BaseDao 测试类中,当使用 dataSource 参数而不是新实例创建 JdbcTemplate 的新实例时,我想返回一个模拟。
@ExtendWith(MockitoExtension.class)
public class BaseDaoTest {
@Mock
private JdbcTemplate defaultTemplate;
@Test
public void testSetDataSource() throws SQLException {
when(<what to do here?>).thenReturn(mockedDefaultTemplate) //here when new instance of JdbcTemplate is created i would like to return this mockedDefaultTemplate
}
}
这在PowerMock中使用whenNew是可能的,但是我不想使用PowerMock,因为它没有junit 5支持,而且一般来说我不喜欢powerMock。
请告知我该怎么做。
也许你可以做
public class BaseDao {
protected void setDataSource(DataSource dataSource) {
setJdbcTemplate(new JdbcTemplate(dataSource));
}
protected void setJdbcTemplate(JdbcOperations defaultTemplate ) {
this.defaultTemplate = defaultTemplate
}
public void doSomethingFantastic() { ... }
}
那么你的测试就可以了
JdbcOperations defaultTemplate = Mockito.mock(JdbcOperations.class);
BaseDao dao = new BaseDao();
dao.setJdbcTemplate(defaultTemplate);
dao.doSomethingFantastic();