我有在Jboss服務器上執行查詢的代碼。它擁有一個基於JNDI數據源,看起來像這樣:替換Mockito中的DataSource
public class JNDIBasedDao {
DataSource dataSource;
public JNDIBasedDao(){
try {
InitialContext ic = new InitialContext();
dataSource = (DataSource) ic.lookup("java://bla-bla-bla");
} catch (NamingException e) {
e.printStackTrace();
}
}
public class Manager {
public Manager(){}
private JNDIBasedDao dao = new JNDIBasedDao();
public void runOperation(){
this.dao.executeInsert();
}
在我的筆記本電腦我沒有JBoss和沒有連接到該服務器,並要對其運行HSQLDB單元測試的能力。
我想從基於HSQLDB的apache commons中創建BasicDataSource並將此對象注入到JNDIBasedDao中。
@Mock
BasicDataSource dataSource = new BasicDataSource();
@Mock
JNDIBasedDao dao = new JNDIBasedDao();
@InjectMocks
Manager manager = new Manager();
@Before
public void initMocks(){
dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
dataSource.setUrl("jdbc:hsqldb:mem:dannyTest");
dataSource.setUsername("sa");
dataSource.setPassword("");
dataSource.setInitialSize(5);
dataSource.setMaxActive(10);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxOpenPreparedStatements(10);
MockitoAnnotations.initMocks(this);
}
@Test
public void testRunOperartion() {
manager.runOperartion();
}
但我仍然收到JNDI錯誤。可以做到嗎?請幫忙。
是否有一個特定的原因,你不想嘲笑你的DAO,而不是數據源? – Perception 2012-03-15 00:52:49