【问题标题】:AssertEquals gives TransactionTooLargeException on big strings on Instrumented Unit TestsAssertEquals 在检测单元测试的大字符串上给出 TransactionTooLargeException
【发布时间】:2016-11-02 17:09:43
【问题描述】:

我对 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 论坛上提问(或者他们有 google 组?!),也可能在一些 Android 工作室专家论坛上提问。

标签: java android unit-testing junit android-testing


【解决方案1】:

我猜你只看到失败断言的行为差异?

如果是这样,这可能是由于内置 JUnit 断言的实现细节造成的。

equals 和 not 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);
    }
}

虽然 not equals 仅使用实际值生成失败消息。

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。对于更早和/或更高版本可能不是这样。

【讨论】:

  • 这是 2 个断言方法的实际源代码吗?
  • @Yahia - 是的,相关位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
相关资源
最近更新 更多