AssertEquals 在 Instrumented Unit Tests 的大字符串上给出 TransactionTooLargeException
AssertEquals gives TransactionTooLargeException on big strings on Instrumented Unit Tests
我在 Android Studio 和单元测试中有一个奇怪的行为。
我正在使用大量 json 数据 (>800kb) 在 Android 上进行检测单元测试 (AndroidJUnitRunner
),当我尝试断言与随机数据相等时:
assertEquals("ghgg", jsonData.toString());
它因 java.lang.RuntimeException: android.os.TransactionTooLargeException
而崩溃。
虽然不等式断言不会崩溃并通过绿色。
assertNotEquals("ghgg", jsonData.toString());
现在,如果我做同样的测试,但只是使用普通的非检测 junit,不等式断言不会像以前那样崩溃并通过绿色,并且等式断言不会通过(红色),但它不会给予例外。
assertEquals("ghgg", jsonData.toString());
为什么在仪器测试中,assertEquals
不能处理大字符串,而 assertNotEquals
可以?
我猜您只看到失败断言的行为差异?
如果是这样,这可能是由于内置 JUnit 断言的实现细节所致。
等于和不等于的失败路径不同。
Equals 创建一个 ComparisonFailure
,它继续对 预期值和实际值进行一些处理。
static public void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(expected, actual)) {
return;
} else if (expected instanceof String && actual instanceof String) {
String cleanMessage = message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else {
failNotEquals(message, expected, actual);
}
}
虽然不等于使用仅实际值生成失败消息。
static public void assertNotEquals(String message, Object unexpected,
Object actual) {
if (equalsRegardingNull(unexpected, actual)) {
failEquals(message, actual);
}
}
private static void failEquals(String message, Object actual) {
String formatted = "Values should be different. ";
if (message != null) {
formatted = message + ". ";
}
formatted += "Actual: " + actual;
fail(formatted);
}
junit 4.12 也是如此。对于较早的 and/or 较新的版本可能并非如此。
我在 Android Studio 和单元测试中有一个奇怪的行为。
我正在使用大量 json 数据 (>800kb) 在 Android 上进行检测单元测试 (AndroidJUnitRunner
),当我尝试断言与随机数据相等时:
assertEquals("ghgg", jsonData.toString());
它因 java.lang.RuntimeException: android.os.TransactionTooLargeException
而崩溃。
虽然不等式断言不会崩溃并通过绿色。
assertNotEquals("ghgg", jsonData.toString());
现在,如果我做同样的测试,但只是使用普通的非检测 junit,不等式断言不会像以前那样崩溃并通过绿色,并且等式断言不会通过(红色),但它不会给予例外。
assertEquals("ghgg", jsonData.toString());
为什么在仪器测试中,assertEquals
不能处理大字符串,而 assertNotEquals
可以?
我猜您只看到失败断言的行为差异?
如果是这样,这可能是由于内置 JUnit 断言的实现细节所致。
等于和不等于的失败路径不同。
Equals 创建一个 ComparisonFailure
,它继续对 预期值和实际值进行一些处理。
static public void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(expected, actual)) {
return;
} else if (expected instanceof String && actual instanceof String) {
String cleanMessage = message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else {
failNotEquals(message, expected, actual);
}
}
虽然不等于使用仅实际值生成失败消息。
static public void assertNotEquals(String message, Object unexpected,
Object actual) {
if (equalsRegardingNull(unexpected, actual)) {
failEquals(message, actual);
}
}
private static void failEquals(String message, Object actual) {
String formatted = "Values should be different. ";
if (message != null) {
formatted = message + ". ";
}
formatted += "Actual: " + actual;
fail(formatted);
}
junit 4.12 也是如此。对于较早的 and/or 较新的版本可能并非如此。