我正在尝试用Groovy编写一些Spock测试,以测试一些Java代码(特别是一个servlet过滤器)。我有一些private static
和private static final
变量想要模拟,但我无法确定是否有方法可以这样做。我知道metaclass
可用于方法,对于变量有类似的东西吗?
public class MyFilter implements Filter {
private static WebResource RESOURCE;
private static final String CACHE_KEY = "key-to-be-used-for-cache";
... actual methods, etc ...
}
Field field = MyFilter.class.getDeclaredField("CACHE_KEY")
field.setAccessible(true)
field.set(null, "new-key-value")
感谢十五世。我现在可以用以下内容来设置:
Field field = MyFilter.class.getDeclaredField("CACHE_KEY")
field.setAccessible(true)
Field modifiersField = Field.class.getDeclaredField("modifiers")
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, "new-key-value")
根据我从https://stackoverflow.com/a/25031713/239408中了解到的情况,这对我在spock中起作用
import java.lang.reflect.Field
import java.lang.reflect.Modifier
...
def setup() {
Field field = BackendCredentials.getDeclaredField("logger")
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, Mock(Logger))
}
看来您没有取消修改器.final
标志的设置。
问题内容: 我在类中使用 私有静态最终LOGGER 字段,并且我希望 LOGGER.isInfoEnabled() 方法返回 false 。我如何通过使用Mockito或jMockit模拟静态的final字段 我的课是: 其junit为: 当我运行它的结果是: 我是jmockit的新手,我希望上述junit案例能够成功运行。而且我必须使用JMockit或Mockito,不能使用Powermocki
我在我的类中使用私有静态final LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false。如何使用mockito或jMockit模拟静态final字段 我的课是: 当我运行它时,结果是: 我是jmockit新手,我希望上面的junit案例能够成功运行。我只能用JMockit或mockito,不能用powermockito。请帮帮忙。
要通过这个测试,必须做的绝对最小的嘲笑是什么? 代码: 测试: 相关:在测试类中模拟私有静态最终变量(没有明确答案)
问题内容: 在Java中,两者之间有什么区别? 和 都是和,不同之处在于属性。 有什么更好的?又为什么呢? 问题答案: 通常,是指“与类型本身相关联,而不是与类型实例相关联”。 这意味着你可以在没有创建类型实例的情况下引用静态变量,并且任何引用该变量的代码都引用完全相同的数据。将其与实例变量进行比较:在这种情况下,该类的每个实例都有一个独立的变量版本。因此,例如: 打印出并且是分开的,因为x和y引
问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。
Java7&8在使用Mockito和PowerMockRunner时弹出新的错误,当涉及静态final变量时,java将抛出字节代码异常中的错误。这是由于现在更严格的字节码验证和模拟静态最终对象编辑字节码,以便成功模拟。 我有以下的类,我试图嘲弄: 我已经看到,您可以通过使用反射来解决这个问题,这里看到了如何使用JUnit、EasyMock或PowerMock模拟静态最终变量,这里看到了Power