我正在使用PODAM在一些JUnit测试用例中使用一些测试数据填充我的对象。我遇到了一个对我没有意义的错误。
PODAM在制作我的对象时会报告这一行记录:
setter:setId不可访问。将其设置为可访问。然而 这是一个安全黑客,你的代码应该真正遵守Javabean 标准。
在我尝试填充对象时,我的每一个二传手都会收到此警告。在这种情况下,setId()包含以下内容:
public void setId( int id )
{
this.id = id;
}
有没有人知道为什么这个错误会被标记,因为该方法是公开的,为什么它被标记为“无法访问”。
我查看了PODAM源代码并检查方法是否可访问,每次返回false时,PODAM会在调用方法之前将方法设置为可访问:
if (!setter.isAccessible()) {
LOG.warn("The setter: {} is not accessible.Setting it to accessible. "
+ "However this is a security hack and your code should really adhere to Javabean standards.",
setter.getName());
setter.setAccessible(true);
}
setter.invoke(retValue, setterArg);
PODAM实际上工作得非常好,并根据我的需要用随机数据填充所有字段。我只是好奇为什么每次都会收到此错误,如果代码中存在问题而导致其无法接受标准。
答案 0 :(得分:3)
isAccessible()为公共设置者返回false
是。应该这样做。根据{{3}},当您尝试通过accessible
对象(反射性地)调用方法时,Method
标志确定Method
对象是否忽略了正常的Java访问规则。根据javadoc,标志默认为false
...含义"应用Java访问规则"。
然而。您发布的代码段似乎误解了accessible
标志,表明可以调用该方法。这是不正确的......最终的结果是虚假的警告。
这看起来像是PODAM中的一个错误,我建议你向PODAM库的维护者提出一个问题。