首页 > 解决方案 > @DataJpaTest 期间自动装配的 ObjectMapper 为空

问题描述

我想测试我的实现以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()@autowired OjbectMapper转换器中的null. 当我尝试使用相同的测试时@SpringBootTest,它工作得很好。@DataJpaTest我想知道是否有任何可以一起使用和走动的地方ObjectMapper

标签: junitspring-data-jpaobjectmapper

解决方案


文档

如果您想测试 JPA 应用程序,可以使用 @DataJpaTest。默认情况下,它将配置一个内存嵌入式数据库,扫描@Entity 类并配置 Spring Data JPA 存储库。常规 @Component bean 不会加载到 ApplicationContext 中。


推荐阅读