我对Android Studio和单元测试有一种奇怪的行为。
我在Android上使用大型json数据(> 800kb)进行检测单元测试(for function in [f_1, f_2]:
...
x = function()[0] # Works for f_1, breaks for f_2
y = function() # Works for f_2, assigns (3, 4) for f_1 while
# we really would like only the 3 to be the
# assigned value
),当我尝试断言与随机数据相等时:
AndroidJUnitRunner
它与assertEquals("ghgg", jsonData.toString());
崩溃。
虽然不平等断言不会崩溃并传递绿色。
java.lang.RuntimeException: android.os.TransactionTooLargeException
现在,如果我进行相同的测试,但只使用普通的非检测junit,不等式断言不会崩溃并像以前一样传递绿色,并且相等断言不会传递(红色),但它不会给出异常
assertNotEquals("ghgg", jsonData.toString());
如果进行检测测试,assertEquals("ghgg", jsonData.toString());
无法处理大字符串,assertEquals
可以吗?
答案 0 :(得分:0)
我猜你只看到断言失败的行为差异?
如果是这样,这可能是由于内置JUnit断言的实现细节造成的。
失败路径对于equals而不是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也是如此。对于早期版本和/或更晚版本,情况可能并非如此。