2017-01-16 18 views
1

Я уже проверил с большинством подобных вопросов и не нашел полезного ответа.MessageSource не читается правильно во время тестирования

Я делаю WebApplication через JHipster, используя Maven v3.3.9. Среди прочего, есть PDF-генерация, которая имеет место. Веб-приложение является многоязычным и использует

/ресурсы/i18n/..

ресурсные файлы для различного перевода. В реальном тестировании все работает отлично, без проблем и ошибок.

Теперь я пытаюсь создать тест, который будет генерировать PDF-файл, и сравнить его с существующим PDF-файлом, чтобы разработка продолжалась. Проблема заключается в том, независимо от того, локаль я использую для тестирования, я получаю ту же ошибку:

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

Я не уверен, что причина ошибки. Поскольку сообщения есть, и во время живых тестов они работают отлично.

Вот код теста:

@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); 

} 


} 

PDFGenerator создает файл testPDF2.pdf и сохраняет его.

UPDATE Добавление:

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

в конфигурации не делать. Я также изменил локаль из

String locale = "de" 

в

Locale locale = Locale.GERMAN; 

и я бросил в линию:

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

непосредственно в начале теста. Я получаю ту же ошибку. Кажется, проблема заключается не в поиске файла, а в его чтении.

+0

Пожалуйста, удалите этикетку pdfbox, это не про pdfbox. –

ответ

1

В вашей конфигурации вам нужно:

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

Мой тест

@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)); 
    } 
} 
+0

Спасибо за быстрый ответ. Я добавил конфигурацию к тесту, но безрезультатно. Я не думаю, что проблема заключается в поиске файла (так как файл находится в обоих/src/test/resource, а также/src/main/resource), но он больше похож на что-то с локали, как будто файл «по-разному читает» по какой-то причине ... Полагаю, я пытаюсь использовать все возможные решения и обновляюсь, как только нахожу ответ. –

+1

Обновлен мой ответ с тестом, он работает сейчас, –

+0

Большое спасибо за указание на то, что bean out. Он создавал пустой MessageSource (DelegatedMessageSource), поэтому тест NotNull продолжал возвращать true. Однако сам объект был пуст и не пропускал путь. Как только я добавил Bean в Application.java, он работал отлично. :) Приветствия –