在@DataJpaTest期间,自动装配的ObjectMapper为null

问题描述

我想使用AttributeConverter测试@DataJpaTest的实现。

测试代码

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class FooRepositoryTest {

    @Autowired
    private FooRepository repository;

    @Test
    void getPojoTest(){
        FooEntity fooEnity= repository.findById("foo");
        FooPojo fooPojo = fooEntity.getJsonPojo()
        //some assertion
        

    }
}

实体

@Entity
@Data
@NoArgsConstructor
public class FooEntity{

    ....

    @Column(columnDefinition= "JSON")
    @Convert(converter = FooConverter.class)
    private FooPojo data;

    ....
}

属性转换器


public class FooConverter implements AttributeConverter<FooPojo,String> {

    @Autowired
    private ObjectMapper mapper;

    @SneakyThrows
    @Override
    public String convertToDatabaseColumn(FooPojo attribute) {
        return mapper.writeValueAsString(attribute);
    }

    @SneakyThrows
    @Override
    public FooPojo convertToEntityAttribute(String dbData) {
        return mapper.readValue(dbData,FooPojo.class);
    }
}

使用上面的代码,当我运行getPojoTest()时,Converter中的@autowired OjbectMappernull。当我用@SpringBootTest尝试相同的测试时,它工作得很好。我不知道是否可以同时使用@DataJpaTestObjectMapper

解决方法

来自Docs

如果要测试JPA应用程序,可以使用

@DataJpaTest。通过 默认情况下,它将配置一个内存嵌入式数据库,扫描 @Entity类并配置Spring Data JPA存储库。定期 @Component bean将不会加载到ApplicationContext中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...