Java 如何从上下文检索JUNIT测试中的org.jboss.resource.adapter.jdbc.WrappedConnection

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

我试图在Junit测试类中获取一个WrappedConnection,以便测试一些DAO功能

我有这样的方法

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();