Java 如何测试和模拟mapstruct转换器?
我在java gradle项目中使用mapstruct frameword,它工作得非常好,但我只想测试:Java 如何测试和模拟mapstruct转换器?,java,junit,mockito,mapstruct,Java,Junit,Mockito,Mapstruct,我在java gradle项目中使用mapstruct frameword,它工作得非常好,但我只想测试: mapstruct生成的源(转换器) 服务类(调用mapstrcut转换器) 我尝试过使用它,但它对我不起作用 这是我的mapstruct界面: @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface RisqueBOConvertisseur extends BOConvertisseur<
- mapstruct生成的源(转换器)
- 服务类(调用mapstrcut转换器)
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RisqueBOConvertisseur extends BOConvertisseur<RisqueARS, RisqueBO> {
@Override
RisqueBO convertirDaoVersBo(RisqueARS dao);
@Override
RisqueARS convertirBoVersDao(RisqueBO bo);
}
}
当我尝试测试我的服务时:
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(类={ServiceRisqueImpl.class,RisqueBOConvertisseurImpl.class,RisqueBOConvertisseur.class})
公共类服务请求测试{
@Mock
private RisqueRepository risqueRepo;
@InjectMocks
ServiceRisqueImpl serviceRisque;
@Mock
private DossierInternetResource dossierInternet;
@Mock
private RisqueBOConvertisseur risqueConv;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
serviceRisque.setRisqueConv(risqueConv);
}
@Test(expected = ObjectNotFoundException.class)
public void testRecupererParIdQuandIdInconnu() {
// INITIALISATION
// Mock la méthode DAO de retour des données en base
when(risqueRepo.findOne(anyString())).thenReturn(null);
// PROCESSUS
serviceRisque.recupererParId("5");
}
少年把我还给我
However the constructor or the initialization block threw an exception : java.lang.ClassNotFoundException: Cannot find implementation for ***.convertisseur.RisqueBOConvertisseur
我的转换器测试有相同的错误:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RisqueBOConvertisseur.class, RisqueBOConvertisseurImpl.class})
public class RisqueBOConvertisseurTest {
@Autowired
private RisqueBOConvertisseur configurationMapper;
private final RisqueBOConvertisseur risqueConv = Mappers.getMapper(RisqueBOConvertisseur.class);
@Test
public void test() {
// INITIALISATION
final RisqueBO risqueBO = new RisqueBO("950095f7-62e7-42e5-a5ae-0d7292e7ad00", "D1", ProfilEpargnant.PROFIL_EPARGNANT_SECURISE,
ComportementFaceRisques.REACTION_BAISSE_MARCHE_PANIQUE);
// PROCESSUS
// final RisqueARS risqueARS =
// RisqueBOConvertisseur.INSTANCE.convertirBoVersDao(risqueBO);
final RisqueARS risqueARS = configurationMapper.convertirBoVersDao(risqueBO);
// VERIFICATIONS
assertEquals(risqueBO.getIdRisque(), risqueARS.getIdRisque());
assertEquals(risqueBO.getIdDossierInternet(), risqueARS.getIdDossierInternet());
assertEquals(risqueBO.getCodeComportementRisque(), risqueARS.getCodeComportementRisque());
assertEquals(risqueBO.getCodeProfilEpargnant(), risqueARS.getCodeProfilEpargnant());
}
}
如何使用mapStruct测试生成的源代码转换器
坦克!我的策略是
@mapper(componentModel=“spring”)
让DI框架注入映射器@Service公共类ServiceRisqueImpl实现ServiceCRUD{
@自动连线
私人危机定位危机;
@自动连线
私人RisqueBOConvertisseur risqueConv;
//...
以及您对ServiceRisqueImpl
@Mock
私人危机定位危机;
@嘲弄
私人档案资源档案网;
@嘲弄
私人RisqueBOConvertisseur risqueConv;
@注射模拟
ServiceRisqueImpl serviceRisque;
in->map->reverseMap->out
,并使用assertj属性断言查看in
是否与out
相同@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RisqueBOConvertisseur.class, RisqueBOConvertisseurImpl.class})
public class RisqueBOConvertisseurTest {
@Autowired
private RisqueBOConvertisseur configurationMapper;
private final RisqueBOConvertisseur risqueConv = Mappers.getMapper(RisqueBOConvertisseur.class);
@Test
public void test() {
// INITIALISATION
final RisqueBO risqueBO = new RisqueBO("950095f7-62e7-42e5-a5ae-0d7292e7ad00", "D1", ProfilEpargnant.PROFIL_EPARGNANT_SECURISE,
ComportementFaceRisques.REACTION_BAISSE_MARCHE_PANIQUE);
// PROCESSUS
// final RisqueARS risqueARS =
// RisqueBOConvertisseur.INSTANCE.convertirBoVersDao(risqueBO);
final RisqueARS risqueARS = configurationMapper.convertirBoVersDao(risqueBO);
// VERIFICATIONS
assertEquals(risqueBO.getIdRisque(), risqueARS.getIdRisque());
assertEquals(risqueBO.getIdDossierInternet(), risqueARS.getIdDossierInternet());
assertEquals(risqueBO.getCodeComportementRisque(), risqueARS.getCodeComportementRisque());
assertEquals(risqueBO.getCodeProfilEpargnant(), risqueARS.getCodeProfilEpargnant());
}
}