相关疑难解决方法(0)

在jUnit中设置JNDI数据源

我正在尝试设置一些jUnit测试.我们的数据库由服务器使用JNDI连接.我们有一个xml描述了root.xml中的设置.如何设置jUnit以连接数据库?我宁愿让它只读取root.xml中的内容,但我仍然愿意设置它,无论如何都有效.

java junit jndi

16
推荐指数
2
解决办法
4万
查看次数

单元测试困境:在不运行JBoss或Spring的情况下使用JNDI数据源

问题陈述

我希望能够对连接到数据库的方法运行junit测试.

当前设置

Eclipse Java EE IDE - Java代码不使用框架.开发人员(包括我)希望在尝试将代码移动到Spring框架之前对当前遗留代码进行更强大的测试,以便我们可以证明行为仍然是正确的.

JBoss 4.2 - 供应商软件的版本限制(Adobe LiveCycle ES2); 我们的Java Web应用程序使用这种JBoss设置来运行和使用Adobe LiveCycle API.

我们无法在Eclipse中成功运行供应商配置的JBoss - 我们花了数周时间尝试这一点,包括联系提供我们支持JBoss for Adob​​e LiveCycle配置的公司.据说问题是Eclipse中的设置存在内存限制问题,但是在Eclipse中成功启动JBoss服务器之前,更改内存设置已经失败了.目前,试图让JBoss在Eclipse内运行是暂时搁置的.

数据库连接在JBoss在启动时加载的JNDI数据源中定义.我们的Web应用程序和Adobe LiveCycle都需要创建与此数据源的连接.

我正在浏览此代码片段中的错误检查和类结构,以关注问题的核心.希望这不会给别人带来麻烦.方括号中的文本不是实际文本.

我们创建连接的代码是这样的:

Properties props = new Properties();
FileInputStream in = null;
in = new FileInputStream(System.getProperty("[Properties File Alias]"));
props.load(in);
String dsName = props.getProperty(“[JNDI data source name here]”); 
InitialContext jndiCntx = new InitialContext();
DataSource ds = (DataSource) jndiCntx.lookup(dsName);
Ds.getConnection();
Run Code Online (Sandbox Code Playgroud)

我希望能够测试依赖于此代码的方法,而无需对其进行任何更改.

在properties-service.xml文件中引用属性文件别名:

  <!-- ==================================================================== -->
  <!-- System Properties Service                                            -->
  <!-- ==================================================================== --> …
Run Code Online (Sandbox Code Playgroud)

java eclipse junit unit-testing jndi

16
推荐指数
1
解决办法
1万
查看次数

如何在单元测试中模拟InitialContext构造函数

当我尝试模拟以下方法(方法是使用业务逻辑的远程EJB调用)进行Junit测试时,它给出了javax.naming.NoInitialContextException

private void someMethod(int id1, int id2, HashMap map){
    ......some code........

    Context ctx = new InitialContext();
    Object ref = ctx.lookup("com.java.ejbs.MyEJB");

    EJBHome ejbHome = (EJBHome)PortableRemoteObject.narrow(ref, EJBHome.class);
    EJBBean ejbBean = (EJBBean)PortableRemoteObject.narrow(ejbHome.create(), EJBBean.class);
    ejbBean.someMethod(id1,name);

    .......some code.......}
Run Code Online (Sandbox Code Playgroud)

我对上述方法的单元测试

@Test
public void testsomeMethod() throws Exception {

    .......setting initial code...
    //Mock context and JNDI

    InitialContext cntxMock = PowerMock.createMock(InitialContext.class);
    PowerMock.expectNew(InitialContext.class).andReturn(cntxMock);
    expect(cntxMock.lookup("com.java.ejbs.MyEJB")).andReturn(refMock);               

    ..........some code..........

    PowerMock.replayAll();
    Whitebox.invokeMethod(ObjectOfsomeMethodClass, "someMethod", id1, id2, map);


}
Run Code Online (Sandbox Code Playgroud)

Whitebox.invokeMethod(ObjectOfsomeMethodClass,"someMethod",id1,id2,map)方法调用它时,它会给出以下异常.

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing ejb

8
推荐指数
2
解决办法
8478
查看次数

以编程方式为Postgres JDBC生成一个`DataSource`对象

JDBC教程建议使用DataSource对象获取的数据库连接,而不是使用DriverManager类.引用" 连接数据源对象"页面:

DataSource objects ...获取数据源连接的首选方法.

如何获得与Postgres 的JDBC连接的这样的对象?我有一个JDBC驱动程序.

现在,我不想摆弄像JNDI 这样.

我可以DataSource在Java应用程序中以编程方式实例化吗?或者我必须自己实现该DataSource界面?

postgresql database-connection datasource jdbc

7
推荐指数
1
解决办法
5694
查看次数