使用web方式定义ejb, 并测试它

头头出了个需求,要求使用web方式定义ejb, 并测试它,包括(EntityBean,MessageDrivenBean,SESSIONBean),我查了下资料,没有什么思路。请大家帮忙。

主要是我不知道要在定义的同时生成测试用例,这个测试用例生成什么呢?比如我定义了一个book的实体bean,我要在定义后同时生成测试用例,该测试getbook么?

唉,无思路,还是这是个荒谬的需求!请大家协助谢谢。





附相关参考资料:

1. 利用 Oracle 实体测试工具进行容器外的 EJB 3.0 测试

http://www.oracle.com/technology/global/cn/pub/articles/debu_testability_of_ejb.html



2. 使用 JUnit 进行容器内测试

http://www.oracle.com/technology/global/cn/pub/articles/server_side_unit_tests.html



3. MockEJBs

http://mockejb.sourceforge.net/



4. Mock Objectss

http://www.mockobjects.com/



5. 基于MockEJB的CMP实现

http://www.jiehoo.com/cmp-container-based-on-mockejb.htm



如果问题描述不清,也请发问,我尽量描述,主要是这个需求就是很模糊的,就是我给的标题,边界有点大。
问题补充:
    我是打算采用ejb3.0,不过能否在定义ejb的时候就知道同时生成单元测试的用例。我觉得实体,消息,会话ejb各司其责,在业务中也是千差万别,似乎没有一个可以通用的测试用例来测试你打算生成的ejb的。

    不知道IDE里有没有这样的功能,我编写一个ejb,IDE就会同时给我自动生成一个测试用例,这个需求可能么?我的疑问主要在这里!
问题补充:
lewhwa 的回答很中肯,我也是被这种怪异的需求给弄得一头雾水,但毕竟人家是总架构师,我需要仰视之,所以搜索了半天的网络。让他提供一个实际的应用例子(需求)给我,比如要定义一个什么样的ejb,对这个ejb需要测试什么?我好按照这个来做设计,呵呵 他说你先给我做设计,然后我们来讨论。我说你不给我需求没法做设计,僵在这里了,我怎么给他个台阶下,让这个提议绕过去过去呢?我是打算让他举出具体的一个用例来,我来给他做其他的解决方案。估计实现也够呛,就像个不知道干嘛的函数你要给它自动生成了,同时自动生成测试用例来?哈 这属于机器智能了吧!
问题补充:
等到周六结贴,这两天再听听意见。
问题补充:
补充下,头还说了,不光要实现支持EJB3.0的还要实现EJB2.0的。
问题补充:
空的测试框架我已经生成了。不过要实际测试使用,我只能臆造出几个需求来,比如返回类型为string的我没事给它测试下返回长度是不是在我定义的一个范围内,呵呵 很无聊的想法吧。
问题补充:
session bean 还好说可以根据返回类型臆造出长度约束这么个测试,entity bean连这样的需求都不好创造出来,还有messagedriven也没法造(这东西没有返回值啊)。
问题补充:
回复看了的。

@Id @SequenceGenerator(name="Orders_SEQUENCE",sequenceName="IWINT.OPENJPA_SEQUENCE_TABLE")

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Orders_SEQUENCE")

//@GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name="ID", unique=true, nullable=false, insertable=true, updatable=true)

public long  getPeronid() {

return id;

}



public void setPeronid(long  id) {

this.id = id;

}



@Column(nullable = false, length = 32)

public String getName() {

return name;

}



public void setName(String name) {

this.name = name;

}

现在有个问题,这句

//@GeneratedValue(strategy = GenerationType.AUTO)

我如果使用的数据库是oracle92则会在插入时报错( ERROR [JDBCExceptionReporter] ORA-02289: 序列(号)不存在)。

使用:

@SequenceGenerator(name="Orders_SEQUENCE",sequenceName="IWINT.OPENJPA_SEQUENCE_TABLE")

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Orders_SEQUENCE")方式就没有问题。我已经在数据库中定义了IWINT.OPENJPA_SEQUENCE_TABLE,就没有问题。oracle不支持GenerationType.AUTO方式么?

问题二:我看资料上说在persistence.xml文件中定义<property name="hibernate.hbn2ddl.auto" value="create-drop">会在jboss服务器启动和关闭时自动创建和删除对应的数据库表,我的应用里不行,只能手动自己建对应的表。奇怪。


问题补充:
看了下这个文章,看样子auto是可以的,不知道那里配的有问题。

http://topic.csdn.net/u/20080624/10/5caccc26-f9f9-4e58-a0be-d17b0bb51537.html

6个回答

[quote]lewhwa 的回答很中肯,我也是被这种怪异的需求给弄得一头雾水,但毕竟人家是总架构师,我需要仰视之,所以搜索了半天的网络。让他提供一个实际的应用例子(需求)给我,比如要定义一个什么样的ejb,对这个ejb需要测试什么?我好按照这个来做设计,呵呵 他说你先给我做设计,然后我们来讨论。我说你不给我需求没法做设计,僵在这里了,我怎么给他个台阶下,让这个提议绕过去过去呢?我是打算让他举出具体的一个用例来,我来给他做其他的解决方案。估计实现也够呛,就像个不知道干嘛的函数你要给它自动生成了,同时自动生成测试用例来?哈 这属于机器智能了吧![/quote]
干自然科学的,总有一般的自然法则(常理)在里面,如果违反之,就是有问题了。如果他(她)找你的麻烦,让之先show一个给看看(当然了,如果这哥们姐们有如此能耐,你可能被Fire掉,其它的人也一样,只留他一个人足矣! :) )

用EJB 3.0吧,EntityBean早已升级为另外一个标准JPA,通过Annotation来定义EntityBean,并且采用POJO的形式,可以在SE,Web,设置EJB中跑。测试也不需要庞大而笨拙的EJB Container了。

[quote]不知道IDE里有没有这样的功能,我编写一个ejb,IDE就会同时给我自动生成一个测试用例,这个需求可能么?我的疑问主要在这里![/quote]
目前任何一个工具都不能代替人思考,所有的IDE(包括Eclipse,NetBeans和IntelliJ为生成的JUnit都是代码架子,而不是真正的测试用例。测试用例和代码开发一样是一项很重要的开发活动,需要设计和实现。
因此,可以这样说,要生成测试用例的架子是可能的,要全自动生成测试用例,目前是不可能,要不还要程序员和测试人员干嘛?如果你的头头需求是后者,心里悄悄地BS它一把!

[quote]补充下,头还说了,不光要实现支持EJB3.0的还要实现EJB2.0的。[/quote]
既然这样,用Java Reflections机制,从EJB所产生的类抽取public class为test类,用public method构造testMethod。这样产生一个测试用例的架子,实现上面所说的第一步再看他到底是啥意思。有可能我们想复杂了。

[quote]session bean 还好说可以根据返回类型臆造出长度约束这么个测试,entity bean连这样的需求都不好创造出来,还有messagedriven也没法造(这东西没有返回值啊)。[/quote]
先拿这个show给他看session bean的。然后做EntityBean的CRUD的架子,不是真的测试用例。看看他到底是啥想法。还是哪句话,让他也展示展示他的才华吧!

[quote]问题二:我看资料上说在persistence.xml文件中定义会在jboss服务器启动和关闭时自动创建和删除对应的数据库表,我的应用里不行,只能手动自己建对应的表。奇怪。 [/quote]
应该是"value="drop-create",当存在表示当存在表时,先删除后建立。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问