【问题标题】:autowired ObjectMapper is null during @DataJpaTest@DataJpaTest 期间自动装配的 ObjectMapper 为空
【发布时间】:2020-10-20 06:03:42
【问题描述】:

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

测试代码

@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

【问题讨论】:

    标签: junit spring-data-jpa objectmapper


    【解决方案1】:

    与创建自己的 ObjectMapper 相比,更好的选择是添加 @AutoConfigureJson 注释:

    @DataJpaTest
    @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
    @AutoConfigureJson
    public void FooRepositoryTest {
    
    }
    

    这也是@JsonTest 使用的。

    【讨论】:

      【解决方案2】:

      来自Docs

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

      【讨论】:

      • 谢谢,现在我明白了,正如文档所说,在使用@DataJpaTest 时,objectMapper bean 不是由 Spring Context 创建的。所以我现在使用new ObjectMapper() 进行相同的测试,它工作得很好。
      猜你喜欢
      • 2020-04-09
      • 1970-01-01
      • 2016-05-01
      • 2018-07-28
      • 2018-04-16
      • 2014-09-08
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多