如何解决这个(可能是)编码相关的错误(Java,Gradle)?

时间:2017-11-29 10:17:12

标签: java gradle encoding automated-tests gradle-2

我有以下方法,它将字符串截断为特定大小(以字节为单位):

public class Utils {
    public static String trimStringToBytesSize(String s, int length) {
        if (s == null || length < 0) return null;
        int trimLength = Math.min(length, s.length());
        String trimmedString = s;
        while (trimmedString.getBytes().length > length && trimLength >= 0) {
            trimmedString = s.substring(0, trimLength);
            trimLength--;
        }
        return trimmedString;
    }
}

我为它写了一些测试:

@Test
public void trimStringToBytesSize() {
[...]
    trimStringToBytesSizeTestLogic("Шалом",
            6,
            "Шал"
    );
[...]
}

private void trimStringToBytesSizeTestLogic(final String input, final int
        stringLength, final String expectedResult) {
    final String actRes = Utils.trimStringToBytesSize(input, stringLength);
    Assert.assertEquals(expectedResult, actRes);
}

此测试在IntelliJ Idea中运行良好。但是,当我在Gradle中运行它时,它会失败。错误是这样的:

org.junit.ComparisonFailure: expected:<Шал[]> but was:<Шал[ом]>

显然,它与字节大小有关。

我试图在minimal project中重现问题,其中包含方法和测试。代码是相同的,但原始代码中出现的问题不会出现在这个最小的项目中。

我试图找出它们之间的区别,并比较最小和原始项目中的编码。根据Notepad ++(UTF-8),它们是相同的。

还有什么可能导致此测试失败?我该如何解决?

注意:我使用的是Java 1.8和Gradle 2.14(由于客户的要求,我无法升级到更新版本。)

0 个答案:

没有答案