Java 如何从上下文检索JUNIT测试中的org.jboss.resource.adapter.jdbc.WrappedConnection
我试图在Junit测试类中获取一个WrappedConnection,以便测试一些DAO功能 我有这样的方法Java 如何从上下文检索JUNIT测试中的org.jboss.resource.adapter.jdbc.WrappedConnection,java,jdbc,junit,jboss,jndi,Java,Jdbc,Junit,Jboss,Jndi,我试图在Junit测试类中获取一个WrappedConnection,以便测试一些DAO功能 我有这样的方法 public static List<Top5TermFact> getTop5TrendsForPeriodAndAnalysisRule(long arId, String date, long analysis_type_id ,WrappedConnection connection) 这里是方法代码: @BeforeClass public static vo
public static List<Top5TermFact> getTop5TrendsForPeriodAndAnalysisRule(long arId, String date, long analysis_type_id ,WrappedConnection connection)
这里是方法代码:
@BeforeClass
public static void setUpClass() throws Exception {
// rcarver - setup the jndi context and the datasource
try {
// Create initial context
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.NamingContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jboss.naming");
InitialContext ic = new InitialContext();
ic.createSubcontext("java:/comp");
ic.createSubcontext("java:/comp/env");
ic.createSubcontext("java:/comp/env/jdbc");
// Construct DataSource
MysqlXADataSource pool = new MysqlXADataSource();
pool.setURL("jdbc:mysql://192.168.xx.xxx:3306/db_name");
pool.setUser("root");
pool.setPassword("password");
ic.bind("java:/comp/env/jdbc/social_coop", pool);
Context initContext = new InitialContext();
Context webContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) webContext.lookup("jdbc/social_coop");
con = (WrappedConnection)ds.getConnection();
con.setAutoCommit(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
这将返回一个异常:
$java.lang.ClassCastException: com.mysql.jdbc.JDBC4Connection cannot be cast
to org.jboss.resource.adapter.jdbc.WrappedConnection at
it.netseven.socialproxy.test.TrendAnalysisRelationsFiller.
setUpClass(TrendAnalysisRelationsFiller.java:92)
[...]
所以问题出在这一行:
con = (WrappedConnection)ds.getConnection();
有什么想法吗?
Tnx为什么您依赖于它是一个
WrappedConnection
而不仅仅是一个java.sql.Connection
?是的,我需要一个WrappedConnection,因为方法有这个签名。请问自己为什么方法有那个签名,而不是更一般的java.sql.Connection
。从表面上看,要求实现特定的类/接口听起来像是一个糟糕的设计,特别是因为它的api只添加了少量通常不需要的方法。但问题是,我必须测试许多始终具有此签名的类。我应该重构所有方法。我在问是否有一个实用的方法来测试这些类。我认为这个解决方案涉及到创建一个WrappedConnection。我认为这将是相当困难的,也许你应该检查JBoss本身是否有涉及WrappedConnection的单元测试,看看他们是如何获得它的。
con = (WrappedConnection)ds.getConnection();