【问题标题】:Mockito: Inject mock SessionContextMockito:注入模拟 SessionContext
【发布时间】:2013-06-24 19:27:38
【问题描述】:

使用 Mockito 测试 EJB3。我试图弄清楚如何在不更改访问权限的情况下注入模拟 SessionContext。

SessionContext 通过@Resource 注入如下:

@Resource
protected void setSessionContext(SessionContext sessionContext)
{
    this.sessionContext = sessionContext;
}

我确实阅读了以下答案,展示了如何使用 jmockit 执行此操作:Mock injected SessionContext

有没有办法在 Mockito 中做同样的事情?

此外,我阅读了以下关于 Mockito 和私有成员变量的答案,这意味着应该重构代码(setter 方法或构造函数参数): https://stackoverflow.com/a/8995712

setSessionContext 更改为public 感觉不对,当SessionContext 确实不能用于在EJB 及其后代之外设置时,更改应用程序代码以使其可使用模拟框架进行测试。

如果有人有任何想法或建议,我将不胜感激。先感谢您。 :-)

【问题讨论】:

    标签: java tdd ejb-3.0 mockito


    【解决方案1】:

    您可以使用 Whitebox.setInternalState,它使用反射来分配对象内部的变量。

    Whitebox.setInternalState(target, field, value)
    

    target - 目标对象
    field - 字段的字符串名称,在您的情况下为“sessionContext”
    value - 模拟 SessionContext。

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2017-10-11
      • 1970-01-01
      相关资源
      最近更新 更多