ReflectionTestUtils 设置带有弹簧值注释返回 NPE 的字段

我有一个实现接口的类。该类有一个私有的 double 字段field1,它使用@Valuespring 注释从应用程序属性中读取值。

我正在开发测试,我需要从该类中填充该字段。为了实现这一点,我正在使用:

        ReflectionTestUtils.setField(Class.class, "field1", value, double.class);

我总是收到空指针异常,但调试日志显示:

DEBUG org.springframework.test.util.ReflectionTestUtils - Setting field 'field1' of type [double] on target object [null] or target class [class com.a.b.c.Class] to value [value].

有人知道如何使用反射为该字段设置值,或者如何为该类字段填充一些值?我没有该类的任何实例,但有接口。


胡说叔叔
浏览 190回答 3
3回答

绝地无双

第一个参数是实例,而不是类YourClass object = new YourClass();ReflectionTestUtils.setField(object, "field1", value);

郎朗坤

这是我对 ReflectionTestUtils 的一些示例测试。@ExtendWith(MockitoExtension.class)class RedisConfigTest {    @Mock    JedisConnectionFactory jedisConnectionFactory;    @Mock    RedisTemplate redisTemplate;    @InjectMocks    @Spy    private RedisConfig config = new RedisConfig(jedisConnectionFactory, redisTemplate);    @BeforeEach    void setUp() {        ReflectionTestUtils.setField(config, "master", "mymaster");        ReflectionTestUtils.setField(config, "redisSentinels", "localhost:6379");        lenient().when(config.jedisConnectionFactory()).thenReturn(jedisConnectionFactory);        lenient().when(config.redisTemplate()).thenReturn(redisTemplate);    }    @Test    void jedisConnectionFactory(){        Assertions.assertEquals(config.jedisConnectionFactory(), jedisConnectionFactory);    }

有只小跳蛙

它应该是您传递给 setField 的对象的实例。例如,假设 Mockito 它应该去:@InjectMocksAbcdImpl abcdImpl;进而:ReflectionTestUtils.setField(abcdImpl, "field", "value");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java