使用Mockito测试EJB3。我正试图弄清楚如何在不更改访问权限的情况下注入模拟SessionContext。
SessionContext通过@Resource
注入,如下所示:
@Resource
protected void setSessionContext(SessionContext sessionContext)
{
this.sessionContext = sessionContext;
}
我确实阅读了以下答案,展示了如何使用jmockit做到这一点:Mock注入的SessionContext
莫基托也有同样的方法吗?
此外,我还阅读了以下关于Mockito和私有成员变量的答案,这些变量意味着应该重构代码(setter方法或构造函数参数):https://stackoverflow.com/a/8995712
将setSessionContext
更改为public感觉是错误的,当SessionContext
真的不应该在EJB及其子代之外设置时,更改应用程序代码以使其可以使用模拟框架进行测试。
如果有人有任何想法或建议,我将不胜感激。提前谢谢。:-)
您可以使用Whitebox.setInternalState,它使用反射来分配对象内部的变量。
Whitebox.setInternalState(target, field, value)
target-目标对象
field-字段的字符串名称,在您的情况下为"sessionContext"
value-模拟SessionContext。