我有以下结构:
public class MyDao{
private JdbcTemplate jdbcTemplate;
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public VCASDao(DataSource dataSource ){
jdbcTemplate = new JdbcTemplate(dataSource);
}
}
一些经理类
public class MyManager{
MyDao dao = null;
private DataSource dataSource;
public MyManager(){}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void someMethod(Object o){
dao.save(o);
}
}
}
和门面类
public class MyFacadeClass{
private MyManager manager;
public MyFacadeClass(){
manager = new MyManager();
}
public void someFacadeMethod(Object o){
manager.someMethod(o);
}
}
现在我想用 JUnit 和 Mockito 来测试它。我的问题是我没有 JNDI 架构,我需要使用基于 HSQLDB 的 DataSource 模拟 JdbcTemplate。
我的嘲笑是这样的:
@Mock
static BasicDataSource dataSource ;
@Mock
static JdbcTemplate jdbcTemplate ;
@Mock
MyDao dao;
MyFacadeClass myFacadeClass = new MyFacadeClass();
@BeforeClass
public static void init(){
dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
dataSource.setUrl("jdbc:hsqldb:mem:Test");
dataSource.setUsername("sa");
dataSource.setPassword("");
dataSource.setInitialSize(5);
dataSource.setMaxActive(10);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxOpenPreparedStatements(10);
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate
.execute("create Some Table");
}
@Test
public void testSomeFacadeMethod(){
Object o = new Object();
myFacadeClass.someFacadeMethod(o);
}
我在 MyManager 构造函数中遇到异常,即“some_DB”的 JNDI 名称不存在。
我认为我对 Mocking 通用方法有疑问。请帮忙。
PS:我在这个项目中没有使用 spring,只是使用 JdbcTemplate 类来简化代码。
更新:
我改变了我的课程,但现在 dao 对象为空。