0

我正在使用 NetBeans 和 GlassFish 3.0.1 创建 EJB3 应用程序。我编写了一些单元测试,它们通过 JUnit 运行并使用嵌入式 GlassFish。每当我在我的开发机器上(所以从 NetBeans 中)运行这些测试时,一切都很好。

现在我想让 Hudson 做这些测试。目前,它因资源查找失败而失败(在本例中为 JPA 持久性单元的数据源):

[junit] SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
[junit] java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'mvs_devel' in SerialContext

在搜索并尝试了解这一点后,我认为这与嵌入式 GlassFish 没有配置资源有关。换句话说,它缺少一个 domain.xml 文件。正确的?

两个问题:

  1. 为什么它可以在我的开发盒上与 NetBeans 一起使用?NetBeans 在后台有什么魔力?
  2. 我应该如何提供文件?Hudson-box 上的嵌入式 GlassFish 期望它在哪里?

Hudson 使用相同的 Ant 构建脚本(由 NetBeans 创建)。

我已经阅读了有关 instanceRoot 和 EmbeddedFileSystemBuilder 的这篇文章,但我对此还不够了解。每个 TestCase 都需要这个吗(Emb. GF 为每个被测 bean 启动/停止)?这是 EJBContainer.createEJBContainer() 的一部分吗?同样,为什么在 NetBeans 上运行测试时不需要这样做?

更新 按照 Peter 的建议,我可以确认:在新签出的代码副本上运行 ant 时,具有与配置 hudson 相同的属性,测试将被执行!

4

1 回答 1

1

10-1 这是一个类路径问题,因为 IDE 倾向于根据您是正常运行还是单元测试来交换路径。

尝试从您的 SCM 中新签出的版本在命令行上运行测试。您可能会遇到相同的错误。在本地机器上调试比在远程机器上容易得多。

当它在命令行上可靠地构建(在一个单独的目录中)时,是时候转移到 hudson 了。

于 2010-09-15T13:45:43.140 回答