使用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及其后代之外进行设置时使用模拟框架使其可测试。
如果有人有任何想法或建议,我将不胜感激。先感谢您。 : - )
答案 0 :(得分:0)
您可以使用Whitebox.setInternalState,它使用反射在对象中分配变量。
Whitebox.setInternalState(target, field, value)
目标 - 目标对象
field - 字段的字符串名称,在您的情况下为“sessionContext”
value - 模拟SessionContext。