我正在使用PODAM在某些JUnit测试用例中用一些测试数据填充对象。我遇到了一个对我来说没有意义的错误。
PODAM在制造对象时报告以下记录行:
setter:setId不可访问。将其设置为accessible。然而
这是一个安全黑客,您的代码应该真正遵循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实际上工作得很好,并且可以根据需要用随机数据填充所有字段。我只是好奇为什么我每次都会收到此错误,以及代码中是否存在导致其不理解标准的问题。
最佳答案
isAccessible()为公共设置程序返回false
是。应该做的。根据the javadocs,当您尝试通过(反射)对象通过accessible
对象调用该方法时,Method
标志确定Method
对象是否忽略普通的Java访问规则。根据javadoc,该标志默认为false
...,表示“应用Java访问规则”。
然而。您发布的代码段似乎误解了accessible
标志,表明该方法可以被调用。那是不正确的……最终结果是虚假警告。
这看起来像是PODAM中的错误,建议您向PODAM库的维护者提出问题。
关于java - isAccessible()为公共(public)设置程序返回false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23361320/