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



我正在使用java,spring,我想防止在消息属性文件上进行一些无效的字符。

一些大学使用不同的操作系统,IDE和设置。由于我们的语言是葡萄牙语,并且Windows默认编码是Windows-1252(或CP-1252),因此在编辑文件时,通常会对特殊(重音)chars(例如Á,Excent)chars感到困惑,因为其中有些是因为其中一些可以使用其他编码并弄乱消息属性文件,例如:

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();
        }
    }
}

最新更新