【发布时间】:2023-04-01 08:57:01
【问题描述】:
我正在尝试决定如何为 Java-EE Web 应用程序创建一组验收测试。
设置如下:Maven 用于生成 WAR 文件并将其部署到 Glassfish。在部署时,MySQL 数据库架构会使用 Hibernate(“hbm2ddl=auto”选项)从模型类自动更新。
验收测试需要通过调用各种方法来测试部署的代码并检查结果是否符合预期(*)。我们编写了一组额外的包来挂钩到现有系统,因此验收测试应该显示如何将这些包集成到现有代码库中。
(*) 这听起来更像是单元/集成测试,但它们是验收测试,因为它们应该证明我们所做的工作是有效的,并且它们需要在部署后运行,以便有一个适当的数据库。
从以上内容来看,我目前的想法是使用 JUnit 来检查预期值等。我正在努力解决的问题是如何在部署之后调用这些测试。 “部署”是 Maven 的最后一个阶段,所以不确定这是否可能?
【问题讨论】:
-
我不确定您是否真的需要在测试之前进行部署。对于集成测试,我们可以使用 DBUnit 并且数据库将可用。
-
谢谢,但即使数据库是从使用 Hibernate 的类生成的,这是真的吗?我从来没有使用过 DBUnit(但在试图找到答案时在这里遇到过几次)所以需要调查一下。
-
是的,这是真的;我目前使用它进行集成测试。
-
这表明我缺乏知识,但我要添加的代码库使用“seam-managed Hibernate session”。这是通过调用 Component.getInstance("hibernateSession") 来实例化的。如果在部署之前进行此调用并出现“无应用程序上下文活动”错误,则此调用将失败。不知道为什么会这样 - 但即使它成功了,如果在应用程序服务器上部署之前完成,我对 Hibernate 引用的数据库如何/在何处存在感到困惑。
-
不,我认为这很正常,因为您只是从测试开始。您必须在运行测试之前初始化应用程序上下文才能使这种方式起作用。例如您可以参考:stackoverflow.com/questions/10104372/…
标签: maven deployment junit integration-testing acceptance-testing