Jos*_*man 4 java integration-testing dependency-injection java-ee openejb
事实上,我的情况有点简单,因为我现在甚至没有使用持久性单元进行测试.我的测试项目提供了一个简单的MDB和一个会话bean; MDB和会话bean都正常加载,并且可以在没有注入的情况下成功测试(以约束的方式).
@LocalClient在单元测试中使用注释的建议注入失败,出现已知错误:
javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See http://openejb.apache.org/3.0/local-client-injection.html
当我访问此页面时,它通知我可能需要在我的测试用例上下文设置中添加一个额外的属性.所以现在看起来像:
Run Code Online (Sandbox Code Playgroud)@Override public void setUp() throws Exception { initializeContext(); }
public void initializeContext() {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
// the property i've added
p.put("openejb.tempclassloader.skip", "annotations");
try {
InitialContext initialContext = new InitialContext(p);
initialContext.bind("inject", this);
} catch (Throwable throwable) {
throwable.printStackTrace();
throw new RuntimeException(throwable);
}
}
Run Code Online (Sandbox Code Playgroud)
但它仍然失败.我真的很喜欢这个成语,如果我能在我的项目中成功使用它,我会非常兴奋.
其他几点说明:
@LocalClientOpenEJB引擎未识别带注释的测试用例,因为它们实际上被正确拾取和处理(例如,我的MDB)在此先感谢任何帮助或指导.
此问题可能是由描述符的位置不正确引起的,这些描述符提示OpenEJB哪种模块可用.
为了保证测试的类得到回升正常,确保你把一档名为application-client.xml在src/test/resources/META-INF包含以下内容:
<application-client/>
这应该强制OpenEJB扫描并对@LocalClient注释的存在作出反应.
| 归档时间: |
|
| 查看次数: |
3062 次 |
| 最近记录: |