在 void 方法中模拟新实例创建调用,而不使用 PowerMock

问题描述 投票:0回答:1

我有一个类,在 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。

请告知我该怎么做。

java unit-testing junit mockito junit5
1个回答
0
投票

也许你可以做

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();
© www.soinside.com 2019 - 2024. All rights reserved.