Using Spock to mock private static final variables in Java

后端 未结 2 456
感情败类
感情败类 2020-12-16 19:21

I\'m trying to write some Spock tests with Groovy to test some Java code (specifically a servlet Filter). I have some private static and private static fi

2条回答
  •  醉酒成梦
    2020-12-16 20:01

    Based on what I learned from https://stackoverflow.com/a/25031713/239408, this works for me in 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))
        }
    

    Looks like you are missing the unsetting of the Modifier.FINAL flag.

提交回复
热议问题