使用MapStruct,我创建了一个映射器,它是一个抽象类。我决定将映射器从接口转换为抽象,以便使用组件名称AddressConverter
,该组件本身使用名为CountryService
的组件。
尽管映射工作正常,但在单元测试中,它会抱怨组件addressconverter
找不到合格bean。
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mind.microservice.mapper.converter.AddressConverter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)
... 42 more
映射器类。我尝试在@mapper
注释的use
属性中添加addressconverter
。但是异常移到了addressconverter
的下一个组件。
@Mapper(componentModel = "spring", uses = {
GenericMapper.class,
Size.class
})
public abstract class StudentMapper{
@Autowired
private AddressConverter addressConverter;
@Mappings({
@Mapping(target = "address", source = "student", qualifiedByName = "formatAddress"),
})
public abstract StudentEntity map(Student student);
@Named("formatAddress")
public String formatAddress(Student student){
return this.addressConverter.buildAddress(student);
}
}
AddressCoverter
@Component
@AllArgsConstructor
public class AddressConverter {
private final CountryService countryService;
public String buildAddress(Student student){
return this.countryService.countryFormatter(student.getCountry);
}
}
出现异常的测试类。正如我提到的,我尝试将AddressConverter
添加到ContextConfiguration
。我还尝试通过添加injectmocks
来完全模仿它。
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {
GenericMapper.class,
Size.class
})
public class StudentMapperTest{
@Autowired
private StudentMapper MAPPER;
//also @Autowired was used and also I removed it completely, still the same exception
@InjectMocks
private AddressConverter addressConverter;
@Test
public void testStudentToStudentEntityMapping() {
Student randomStudent = ObjectHandler.random(Student.class);
//...the rest of the test but it doesn't even enter, so it doesn't affect the outcome.
}
}
我相信您需要用@mockbean更改@injectmock
使用@SpringBootTest,据我所知,Spring实际上是在启动应用程序,并且应该创建映射器类,所以我不明白,为什么映射器总是空?!当我删除@SpringBootTest中的DummyMapper.class时,会出现一个错误,上面写着“Failed to load application Context”。这向我表明,映射器是被识别的。 我觉得奇怪的另一件事是,我必须在映射器中使用“un
我使用的是一个用MapStruct生成的映射器: 缺省组件模型是spring(在pom.xml中设置)
我正在尝试使用MockMvc和mockito为应用程序中的rest控制器类编写单元测试。我有一个实体类的DTO类,我给出它作为controller方法的输入。controller方法将此DTO对象映射到entity类中,并使用my service类持久化它。持久化之后,通过映射service类的方法返回的对象来创建一个新的DTO类,并在ResponseEntity对象中返回这个DTO。在我的单元测
我试图用为MapStruct映射器编写单元测试。 单元测试类: 任何帮助都将不胜感激。
我有一个用户的Entity-DTO转换器,如下所示: 我有很多Entity-DTO要管理,所以我想像这样抽象转换器 我的问题是:我必须放置什么而不是???
我正在使用MapStruct,mapstruct-jdk8版本1.1.0.final并定义我通过spring注入的抽象类。 我正在研究如何能够通过Junit测试来测试它们?我有一个基本的主映射器,它将使用2个子映射器 我尝试了几种方法,但无法正确实例化映射器来测试它。 java.lang.RuntimeException:java.lang.ClassNotFoundException:找不到Co