J'ai déjà vérifié avec la plupart des questions similaires et je n'ai pas trouvé de réponse utile.

Je crée une application Web via JHipster en utilisant Maven v3.3.9. Entre autres choses, il y a une génération de PDF qui a lieu. L'application Web est multilingue et utilise le

/ resources / i18n / ..

Fichiers de ressources pour les différentes traductions. Lors des tests en direct, tout fonctionne parfaitement sans problèmes ni erreurs.

J'essaie maintenant de créer un test qui générera un PDF et le comparera à un PDF existant afin que le développement puisse continuer. Le problème est que, peu importe les paramètres régionaux que j'utilise pour les tests, j'obtiens la même erreur:

org.springframeworkcontext.NoSuchMessageException: No message found under code 'pdf.klasse' for locale 'de'

Je ne sais pas quelle est la cause de l'erreur. Puisque les messages sont là et pendant les tests en direct, ils fonctionnent parfaitement.

Voici le code de test:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DeviceDataCheckApp.class)
public class PDFGeneratorTest
{
private MockMvc mockMvc;

private CalculationMapperImpl calculationMapperImpl;

private Calculation calculation;
private CalculationDTO calculationDTO;
private CalculationResult calculationResult;
private String langval = "de";
private String name = "";

private PDFGenerator pdfGenerator;

@Autowired
private MessageSource messageSource;

@Autowired
private WebApplicationContext webApplicationContext;

@Before
public void setup() throws IOException, URISyntaxException, IllegalAccessException, InstantiationException
{
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();

    calculation = new Calculation()
            .producerName("test")
            .airVolumeSupply(2.0)
            .airVolumeExhaust(2.0)
            .statedAirVelocitySupply(2.0)
            .statedAirVelocityExhaust(2.0)
            .staticPressureLossSupply(2.0)
            .staticPressureLossExhaust(2.0)
            .pMSupply(2.0)
            .pMExhaust(2.0)
            .pMAnfSupply(2.0)
            .pMAnfExhaust(2.0)
            .pressureLossWrgSupply(2.0)
            .pressureLossWrgExhaust(2.0)
            .pressureLossMediumSupply(2.0)
            .pressureLossMediumExhaust(2.0)
            .enginePowerRotor(0.0)
            .dryThermalPerformance(0.0)
            .ofHeatRecovery(2.0)
            .wrgType(WrgType.PLATTENTAUSCHER)
            .earlyPressureLossFilterSupply(2.0)
            .earlyPressureLossFilterExhaust(2.0)
            .dimensioningPressureLossFilterSupply(2.0)
            .dimensioningPressureLossFilterExchaust(2.0)
            .referenceConfigurationFilterSupply(false)
            .referenceConfigurationFilterExhaust(false)
            .additionalFilterStageSupply(false)
            .additionalFilterStageExhaust(false)
            .hepaFilterSupply(false)
            .hepaFilterExhaust(false)
            .gasFilterSupply(false)
            .gasFilterExhaust(false)
            .highPerformanceCondenserSupply(false)
            .highPerformanceCondenserExhaust(false)
            .heightInnerDimensionSupply(2.0)
            .heightInnerDimensionExhaust(2.0)
            .depthInnerDimensionSupply(2.0)
            .depthInnerDimensionExhaust(2.0);

    calculationMapperImpl = new CalculationMapperImpl();
    calculationDTO = calculationMapperImpl.calculationToCalculationDTO(calculation);

    calculationResult = new CalculationResult();
    calculationResult.setRealAreaSA(0.00);
    calculationResult.setRealAreaEA(0.00);
    calculationResult.setRealAirVelocitySA(138.89);
    calculationResult.setRealAirVelocityEA(138.89);
    calculationResult.setCheckedVClassSA("V9");
    calculationResult.setCheckedVClassEA("V9");
    calculationResult.setDeclaredVClassSA("V4");
    calculationResult.setDeclaredVClassEA("V4");

    calculationResult.setpMRefSA(0.00);
    calculationResult.setpMRefEA(0.00);
    calculationResult.setpMMaxSA(0.00);
    calculationResult.setpMMaxEA(0.00);
    calculationResult.setpClassSA("-");
    calculationResult.setpClassEA("-");

    calculationResult.setPressureLossWrg(4);
    calculationResult.setPressureLossMedium(0);
    calculationResult.setRatedAirVolume(2);
    calculationResult.setDryThermalPower(0.00);
    calculationResult.setAuxiliaryPower(0.00);
    calculationResult.setElectricalPowerInput(0.00);
    calculationResult.setPerformanceReferenceNumber(72.29);
    calculationResult.setEfficiency(1.97);
    calculationResult.sethClass("H6");

    calculationResult.setpSfpVSA(3600000.00);
    calculationResult.setpSfpVEA(3600000.00);
    calculationResult.setExtraPSfpSA(0);
    calculationResult.setExtraPSfpEA(0);
    calculationResult.setSfpVClassSA("SFP7");
    calculationResult.setSfpVClassEA("SFP7");

    calculationResult.setSystemEfficiencySA(0.00);
    calculationResult.setSystemEfficiencyEA(0.00);

    calculationResult.setInternalPressureLossSA(2);
    calculationResult.setInternalPressureLossEA(2);
    calculationResult.setInternalPressureLossTotal(4);
    calculationResult.setSfpIntSA(3600000);
    calculationResult.setSfpIntEA(3600000);
    calculationResult.setSfpIntTotal(7200000);

    calculationResult.seteBonus2016(0);
    calculationResult.seteBonus2018(0);
    calculationResult.setfCorrection2016(360);
    calculationResult.setfCorrection2018(340);
    calculationResult.setSfpMax2016(840);
    calculationResult.setSfpMax2018(760);
    calculationResult.setAchieved2016(false);
    calculationResult.setAchieved2018(false);



    pdfGenerator = new PDFGenerator(calculationDTO, calculationResult, langval, messageSource, name);
}

@Test
public void compareFilesTest() throws IOException
{
    System.out.println(calculation);

    File f1 = new File("../PDFData/testPDF.pdf");
    File f2 = new File("../PDFData/testPDF2.pdf");

    boolean areSame = FileUtils.contentEquals(f1, f2);
    System.out.println("Files were compared...");
    assertTrue(areSame);

}


}

Le PDFGenerator crée le fichier testPDF2.pdf et l'enregistre.

MISE À JOUR Ajout du:

@PropertySource("classpath:/src/main/resources/i18n/messages_de.properties")

À la config n'a pas fait grand chose. J'ai également changé les paramètres régionaux de

String locale = "de"

À

Locale locale = Locale.GERMAN;

Et j'ai jeté dans la ligne:

System.out.println(messageSource.getMessage("pdf.klasse", null, this.locale));

Directement au début du test. J'ai la même erreur. Il semble que le problème ne soit pas de trouver le fichier mais de le lire.

6
Emir Masic 16 janv. 2017 à 13:18

2 réponses

Meilleure réponse

Dans votre configuration, vous avez besoin de:

@Bean
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource source = new ResourceBundleMessageSource();
    source.setBasenames("i18n/messages");
    return source;
}

Mon test est

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class Test1 {

    @Autowired
    private MessageSource messageSource;

    @Test
    public void test1() {
        assertNotNull(messageSource);
        assertEquals("test greg de", messageSource.getMessage("pdf.klasse", null, Locale.GERMANY));
    }
}
5
Essex Boy 16 janv. 2017 à 13:31

Ma solution.

Déclarez MessageSource dans la classe de test et DelegatingMessageSource autowired dans la classe de test.

private MessageSource messageSource;

@Autowired
private DelegatingMessageSource delegatingMessageSource;

Créez la configuration comme indiqué ci-dessous

@Before
public void setUp() {
  messageSource = Mockito.mock(MessageSource.class);
  when(messageSource.getMessage(anyString(), any(Object[].class),any(Locale.class))).thenReturn("");
  delegatingMessageSource.setParentMessageSource(messageSource);
}

Cela devrait bien fonctionner.

2
oliver carrasco 14 juin 2018 à 15:16