自动装配的 ObjectMapper 在 @DataJpaTest 期间为空
autowired ObjectMapper is null during @DataJpaTest
我想使用 @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
OjbectMapper
是null
。当我用 @SpringBootTest
尝试相同的测试时,它工作得很好。我想知道是否有任何解决方法可以一起使用 @DataJpaTest
和 ObjectMapper
。
来自Docs:
@DataJpaTest can be used if you want to test JPA applications. By
default it will configure an in-memory embedded database, scan for
@Entity classes and configure Spring Data JPA repositories. Regular
@Component beans will not be loaded into the ApplicationContext.
与创建自己的 ObjectMapper
相比,更好的选择是添加 @AutoConfigureJson
注释:
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@AutoConfigureJson
public void FooRepositoryTest {
}
这也是@JsonTest使用的。
我想使用 @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
OjbectMapper
是null
。当我用 @SpringBootTest
尝试相同的测试时,它工作得很好。我想知道是否有任何解决方法可以一起使用 @DataJpaTest
和 ObjectMapper
。
来自Docs:
@DataJpaTest can be used if you want to test JPA applications. By default it will configure an in-memory embedded database, scan for @Entity classes and configure Spring Data JPA repositories. Regular @Component beans will not be loaded into the ApplicationContext.
与创建自己的 ObjectMapper
相比,更好的选择是添加 @AutoConfigureJson
注释:
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@AutoConfigureJson
public void FooRepositoryTest {
}
这也是@JsonTest使用的。