我正在尝试设置一些jUnit测试.我们的数据库由服务器使用JNDI连接.我们有一个xml描述了root.xml中的设置.如何设置jUnit以连接数据库?我宁愿让它只读取root.xml中的内容,但我仍然愿意设置它,无论如何都有效.
我希望能够对连接到数据库的方法运行junit测试.
Eclipse Java EE IDE - Java代码不使用框架.开发人员(包括我)希望在尝试将代码移动到Spring框架之前对当前遗留代码进行更强大的测试,以便我们可以证明行为仍然是正确的.
JBoss 4.2 - 供应商软件的版本限制(Adobe LiveCycle ES2); 我们的Java Web应用程序使用这种JBoss设置来运行和使用Adobe LiveCycle API.
我们无法在Eclipse中成功运行供应商配置的JBoss - 我们花了数周时间尝试这一点,包括联系提供我们支持JBoss for Adobe 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) 当我尝试模拟以下方法(方法是使用业务逻辑的远程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) 该JDBC教程建议使用DataSource对象获取的数据库连接,而不是使用DriverManager类.引用" 连接数据源对象"页面:
DataSourceobjects ...获取数据源连接的首选方法.
如何获得与Postgres 的JDBC连接的这样的对象?我有一个JDBC驱动程序.
我可以DataSource在Java应用程序中以编程方式实例化吗?或者我必须自己实现该DataSource界面?
java ×3
junit ×3
jndi ×2
unit-testing ×2
datasource ×1
eclipse ×1
ejb ×1
jdbc ×1
postgresql ×1