为什么 OpenLiberty 数据源在单元测试中不可用?
OpenLiberty 正在开发模式下运行。 在我的代码中的某个地方,我使用
Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");
在网络服务器中配置的数据源:
<dataSource id="mssql" jndiName="app/myDB">
<connectionManager maxPoolSize="20000" minPoolSize="2"/>
<jdbcDriver libraryRef="MSSQL"/>
<properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.xxx.xxx.xxx" portNumber="1433" user="X" password="Y"/>
</dataSource>
到目前为止,这工作正常,直到我尝试运行我的单元测试。
当尝试按需运行测试时,某处调用此代码:
Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");
my webapp 失败并显示
javax.naming.NoInitialContextException
那么为什么单元测试没有初始上下文呢?我可以以某种方式告诉 OpenLiberty 为测试范围提供该资源吗?或者我必须模拟初始上下文吗?我是编写单元/集成测试的初学者。如果我需要提供更多信息,请告诉我。
编辑:添加了开发模式和一般说明
OpenLiberty is running in dev-mode.
Somewhere in my code i use
Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");
with a datasource configured in the webserver:
<dataSource id="mssql" jndiName="app/myDB">
<connectionManager maxPoolSize="20000" minPoolSize="2"/>
<jdbcDriver libraryRef="MSSQL"/>
<properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.xxx.xxx.xxx" portNumber="1433" user="X" password="Y"/>
</dataSource>
This works fine so far, until i try to run my units tests.
When trying to run the tests on demand, that somewhere call this code:
Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");
my webapp fails with
javax.naming.NoInitialContextException
So why do the unit tests do not have the initial context? Can i somehow tell OpenLiberty to provide that resource for test scope? Or do i have to mock the initialContext? I am a beginner in writing unit/integration test. If i need to provide additional information please tell me.
edit: added dev-mode and general clarification
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了使 DataSource 可用于 Liberty 中的 JNDI 查找,您需要运行 Liberty 服务器并启用 jndi-1.0 功能部件,并启用 jdbc-4.x 功能部件之一。例如,在 server.xml 中,
In order for a DataSource to be made available for JNDI lookups in Liberty, you need to have the Liberty server running and the jndi-1.0 feature enabled, and one of the jdbc-4.x features enabled. For example, in server.xml,