在测试期间无法正确读取MessageSource

Emi*_*sic 5 java spring maven jhipster

我已经检查了大多数类似的问题,但找不到有用的答案.

我正在使用Maven v3.3.9通过JHipster制作WebApplication.除此之外,还有一代PDF生成.该网络应用程序是多语言和使用

/资源/国际化/ ..

不同翻译的资源文件.在实时测试中,一切都运行良好,没有任何问题或错误

我现在正在尝试创建一个测试,它将生成PDF并将其与现有PDF进行比较,以便继续开发.问题是,无论我使用哪种语言环境进行测试,我都会遇到同样的错误:

org.springframeworkcontext.NoSuchMessageException:在代码'pdf.klasse'下找不到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);

}


}
Run Code Online (Sandbox Code Playgroud)

PDFGenerator创建testPDF2.pdf文件并保存.

更新 添加:

@PropertySource("classpath:/src/main/resources/i18n/messages_de.properties")
Run Code Online (Sandbox Code Playgroud)

配置没有做太多.我也改变了语言环境

String locale = "de"
Run Code Online (Sandbox Code Playgroud)

Locale locale = Locale.GERMAN;
Run Code Online (Sandbox Code Playgroud)

我投入了这条线:

System.out.println(messageSource.getMessage("pdf.klasse", null, this.locale));
Run Code Online (Sandbox Code Playgroud)

直接在测试开始时.我犯了同样的错误.似乎问题不是找到文件而是阅读文件.

Ess*_*Boy 5

在您的配置中,您需要:

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

我的测试是

@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));
    }
}
Run Code Online (Sandbox Code Playgroud)