繁体   English   中英

如何创建单元测试以检测是否有人使用了错误的编码来编辑文件?

[英]How to create a unit test to detect if someone edited the file using the wrong encoding?

我正在使用Java,Spring,并且希望防止消息属性文件上出现一些无效的字符。

一些学院使用不同的操作系统,IDE和设置。 由于我们的语言是葡萄牙语,而Windows默认编码是Windows-1252(或CP-1252),因此在编辑文件时,对于特殊(重音)字符(如á,ã,õ等)会产生一些混淆是很常见的,因为其中有些可以使用不同的编码并弄乱messages属性文件,如下所示:

1002 = O pedido não foi encontrado
1003 = O pedido j� est� finalizado
1004 = A situa��o do hist�rico do pedido n�o � permitida

上面的文件最初是UTF-8文件,但有人使用Windows-1252编码编辑该文件,添加了两个新条目(1003和1004),并在将文件读取为UTF-时在重音符号位置创建了这个怪异的问号。 8档。

因此,我正在考虑进行单元测试以检测文件中的此问题。 我该如何进行单元测试? 谢谢!

我在@Mayamar和这个答案的帮助下找到了答案

@Test
public void verifyInvalidCharsOnMessages() throws IOException {
    verifyInvalidChars("src/main/resources/i18n/messages.properties");
    verifyInvalidChars("src/main/resources/i18n/messages_pt_BR.properties");
}

private void verifyInvalidChars(String file) throws IOException {
    Properties p = new Properties();
    FileInputStream input = new FileInputStream(new File(file));
    p.load(new InputStreamReader(input, Charset.forName("UTF-8")));

    Enumeration<String> enums = (Enumeration<String>) p.propertyNames();
    while (enums.hasMoreElements()) {
        String key = enums.nextElement();
        String value = p.getProperty(key);
        if (value.indexOf('\uFFFD') > 0) {
            fail();
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM