【问题标题】:Testing injected dependencies into your struts2 actions将注入的依赖项测试到您的 struts2 操作中
【发布时间】:2010-03-12 20:23:39
【问题描述】:

我想知道其他人是如何做到这一点的。我在 Spring 文档中找到了 @required,我试图在“测试”中使用它,但得到了这个 stmt INFO XmlConfigurationProvider:380 - Unable to verify action class [xxx] 在初始化时存在

我在 spring 中找到了另一种方法来执行此操作,即编写自定义 init 方法并在 bean 上声明这些方法,但对于 struts2 操作来说,这似乎是一件奇怪的事情。

在我的应用程序中,我通过 spring 将不同的 Web 服务(通过 setter 注入)注入到不同的操作中。我想确保在启动时这些不为空并设置。

【问题讨论】:

  • 我想我可以进一步完善我的问题。在 struts2 中,因为大多数操作都是有状态的,所以 bean 的范围是“原型”,这使得 @required 并且当我尝试编写自定义 init 方法时,上面的语句无法验证初始化时是否存在类。当我更改为单例时,我的“检查”工作并且应用程序无法启动。我在搜索中找不到任何方法来在启动时测试原型范围的 spring bean 以确保设置了依赖项。
  • 我认为您可能需要提供更多详细信息——也许是您的 spring 配置文件。您是说当您的测试正在寻找它时(原型)操作不存在,还是它是不存在的依赖项之一?
  • 是的 - 在阅读了有关原型范围的更多信息后,我的理解是这些是在请求操作时创建的,因此在启动时它们不可用,这就是我收到上述错误消息的原因。

标签: spring testing struts2


【解决方案1】:

使用requestsession 弹簧范围。

然后您可以在@PostConstruct 方法中进行检查,您将在那里做什么?抛出异常?好吧,有些东西没有设置,你最终会得到一个NullPointerException

【讨论】:

  • 我想做的是不允许应用程序启动。在阅读了有关@required 的更多信息后,它确实允许空值,因此作为测试,我编写了一个 init 方法并使用 spring 断言功能来说明某个依赖项不为空,并且如果它显示错误消息。你是对的,最终我在调用操作时确实得到了一个具有原型范围的 NPE,但我更愿意知道启动时存在问题。当我将范围更改为单例(作为测试)并使用 init 方法时,我确实得到了引发错误和启动失败的所需行为。
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 2018-01-27
相关资源
最近更新 更多