首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >针对EJB编写JUnit测试的“正确”方法是什么?

针对EJB编写JUnit测试的“正确”方法是什么?
EN

Stack Overflow用户
提问于 2012-02-27 17:09:01
回答 3查看 3.7K关注 0票数 2

我使用的是IBM 7 (又名Eclipse3.4)和WebSphere 7。

我有一个包含@Stateless EntityService@Stateless EntityDAO等的EJB项目。

我有一个包含JAX Web服务的web项目,该服务使用这个JNDI查找EntityService:

代码语言:javascript
运行
复制
ejblocal:entityEAR/entityEJB.jar/EntityService@com.test.EntityServiceLocal

一切都很好。

我的问题是,编写JUnit测试以测试EntityServiceEntityDAO类的“正确”方法是什么?

由于系统需要在WebLogic服务器中运行才能正常工作,所以我想我应该让应用程序运行,然后启动JUnit测试,它可以查找web服务使用的相同的JNDI,但是我得到了一个错误:

Naming Manager ... getURLContext cannot find the factory for this scheme: ejbLocal

任何建议都是有用的,我应该如何编写JUnit测试?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-25 15:24:36

最后,我为要测试的服务类实现了一个@Remote接口,并对服务bean进行了远程JNDI查找。

这里有更多细节:

how to write a JUnit test that can see my EJB service?

票数 0
EN

Stack Overflow用户

发布于 2012-02-27 17:27:11

如果您正在编写Unit测试,那么它们不应该依赖于容器(因为它们只在JVM中执行),所以您不能在它们中执行JNDI查找。要用JUnit测试EJB和DAO,一个模拟框架(如EasyMock)可以提供很大的帮助。

但是,如果您对测试EJB和REST服务之间的通信感兴趣,那么您需要集成测试,我怀疑JUnit在这里可以帮助您。集成测试的一个流行工具是Selenium,您需要一个功能齐全的容器和环境来执行测试。

票数 1
EN

Stack Overflow用户

发布于 2012-02-28 22:16:55

通常,JUnit的目的是编写单元测试。在单元测试中,您可以验证具有单个责任的单个组件的工作(至少它应该具有单一的责任:)--所有依赖项都会以某种方式被模拟(easy模仿、mockito等等)。EJB中使用的依赖项注入简化了这个过程--您可以在单元测试setUp()方法中使用new操作符(不需要容器)实例化bean,然后注入模拟的依赖项(容器注入实际依赖项的方式)。这是我使用的方法。另一件事是集成测试,它验证整个场景--从webservice (或其他远程facade方法)调用开始,通过bean逻辑,直到DB查询。但是,在这种情况下,您不会在webservice/facade之后验证组件。仅用于特定输入的webservice输出。

好的方法是先编写测试(一开始失败),然后编写实现以满足测试要求。对于单元测试(单个bean,没有在容器中运行的测试),我建议使用JUnit和EasyMock/Mockito。对于集成测试,您可以使用Selenium或JUnit+OpenEJB作为测试的简单容器(特别是在EJB组件中有远程外观的情况下)。此外,使用像SoapUI这样的工具,您可以为您的webservice创建整个测试场景--发布一些数据、获取它们、修改、放置、获取、删除等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9469095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档