我正在使用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/

10-12 06:12