gpt4 book ai didi

java - Spring JUnit 和 Mockito - SimpleJdbcTemplate

转载 作者:行者123 更新时间:2023-12-04 06:35:01 25 4
gpt4 key购买 nike

给定一个扩展 SimpleJdbcDaoSupport 的类,你如何模拟 SimpleJdbcTemplate?

public class SimpleJdbcDaoSupportExtension extends SimpleJdbcDaoSupport {  
public SimpleJdbcDaoSupportExtension (JdbcTemplate jdbcTemplate){
super.setJdbcTemplate(jdbcTemplate);
}

public MyDomainObj getResult(){
SimpleJdbcTemplate sjdbc = getSimpleJdbcTemplate();
MyDomainObj result = sjdbc.query(*whatever necessary args*.);
return result;
}
}

然后,使用 Mockito:
public class Test {  
@Mock private JdbcTemplate mockedJdbcTemplateDedendency;
private SimpleJdbcDaoSupportExtension testObj;

@Before
public void doBeforeEachTestCase() {
MockitoAnnotations.initMocks(this);
SimpleJdbcDaoSupportExtension sje = new SimpleJdbcDaoSupportExtension (mockedJdbcTemplateDedendency);
}
@Test
public final void test(){
when(mockedJdbcTemplateDedendency.query("what to query").thenReturn(new MyDomainObj());
}
}

模拟的 JdbcTemplate 被注入(inject),但由于 dao 类依赖 SimpleJdbcTemplate 进行查询(用于映射到对象),并且它是由 SimpleJdbcDaoSupport 在内部构造的 - 模拟 JdcbTemplate 对 SimpleJdbcTemplate 没有影响。那么如何做到这一点,当它没有公共(public) setter 时,并且构造 SimpleJdbcTemplate 的唯一方法是依赖该方法,getSimpleJdbcObject()?

最佳答案

而不是模拟具体的类,你应该模拟一个接口(interface)(它有你需要的方法)。

例如。:

public class SimpleJdbcDaoSupportExtension extends SimpleJdbcDaoSupport implements MyDomainDao{  
public SimpleJdbcDaoSupportExtension (JdbcTemplate jdbcTemplate){
super.setJdbcTemplate(jdbcTemplate);
}

public MyDomainObj getResult(){
SimpleJdbcTemplate sjdbc = getSimpleJdbcTemplate();
MyDomainObj result = sjdbc.query(*whatever necessary args*.);
return result;
}
}

public class Test {
@Mock private MyDomainDao myDomainDao ;
private YourController yourController;

@Before
public void doBeforeEachTestCase() {
MockitoAnnotations.initMocks(this);
yourController = new YourController(myDomainDao);
}
@Test
public final void testSomething(){
when(myDomainDao.getResult().thenReturn(new MyDomainObj());
//on to testing the usages of myDomainDao
yourController.doSomething();
//verify
verify(myDomainDao, times(2)).getResult();
}
}

关于java - Spring JUnit 和 Mockito - SimpleJdbcTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com