如何在不依赖当前JNDI供应商的情况下进行JUNIT dao层

时间:2018-12-04 21:00:32

标签: java tomcat junit wildfly jndi

我面临一项新任务-我需要针对基于WildFly 9的Tomcat JNDI调整我的JUnit测试。

首先,我在Resource标签的tomcat conf / context.xml中具有PG数据源的JNDI属性。

现在我可以通过tomcatJNDI这样使用它了:

@Before
public void setUp() throws Exception {

String filename = "environment.properties";
Properties properties = new Properties();

InputStream input = this.getClass().getClassLoader().getResourceAsStream(filename);
properties.load(input);
String tomcat_context = properties.getProperty("tomcat.context");

TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processContextXml(new File(tomcat_context));
tomcatJNDI.start();

System.setProperty("factory", org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.class.getName());

GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load("classpath:spconfig.xml");
context.refresh();
this.objectsDao = (ObjectsDao) context.getBean("ObjectsDao");

}

它对于Tomcat很好用,但是我需要针对wildfly环境的另一种解决方案。

我正尝试使用

进行JUNIT测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spconfig.xml"})

但是出现此错误:

Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

在那之后,我试图用

制作jndi.properties
java.naming.factory.initial=org.springframework.jndi.JndiObjectFactoryBean

但是它也不起作用。那么有可能针对不同的Web服务器/供应商提供一种解决方案吗?!

0 个答案:

没有答案