我正在使用PODAM用一些 JUnit 测试用例中的一些测试数据填充我的对象。我遇到了一个对我来说没有意义的错误。
PODAM 在制造我的对象时报告此行日志记录:
The setter: setId is not accessible.Setting it to accessible. However this is a security hack and your code should really adhere to Javabean standards.
当我的每一个 setter 尝试填充一个对象时,我都会收到此警告。在本例中,setId() 包含以下内容:
public void setId( int id )
{
this.id = id;
}
有谁知道为什么这个错误被标记,因为该方法是公共(public)的,为什么它被标记为“不可访问”。
我查看了 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() returning false for public setters
是的。应该可以。根据the javadocs ,accessible
标志确定当您尝试通过 Method
对象(反射地)调用该方法时,Method
对象是否忽略正常的 Java 访问规则。根据 javadoc,该标志默认为 false
...意思是“应用 Java 访问规则”。
但是。您发布的代码片段似乎将 accessible
标志误解为指示可以调用该方法。这是不正确的......最终结果是虚假警告。
这看起来像是 PODAM 中的一个错误,我建议您向 PODAM 库的维护者提出问题。
关于java - isAccessible() 对公共(public) setter 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23361320/