【问题标题】:What is going on with Asserts Equality here?这里的断言平等是怎么回事?
【发布时间】:2012-05-10 00:22:03
【问题描述】:

发现这个网站大概是为了测试想成为开发者的人......

http://www.devchallenge.co.uk/challenge-2

问题是这样的……

根据给定的代码,以下哪个测试将返回一个 “真”答案并通过,这将返回“假”答案和 失败?

ArrayList array1 = new ArrayList();
ArrayList array2 = new ArrayList();

array1.add(1);
array1.add(2);
array1.add("Aviva");

array2.add(1);
array2.add(2.0);
array2.add("Aviva");

Asserts
   Equality
      (array1[0],array2[0]);

Asserts
   Equality
      (array1[1],array2[1]);

Asserts
   Equality
      (array1[2],array2[2]);

显然答案是“失败”、“失败”、“通过”。

我不是 Java 开发人员 - 我假设这个挑战来自 Java(尽管没有说明)。

平等到底在做什么?它是在检查相同的 object 还是相同的 value?我知道有些对象被嵌入到 Java 中的字符串/整数池中,所以我可以理解为什么最后一个对象是正确的。但是为什么第一个不正确呢?

【问题讨论】:

  • 这些断言是伪代码,所以没有明确的答案。但我很确定“平等”的意思是“调用equals 的结果”。
  • @Marko 是的,这就是我的想法——因此您是否希望看到Equality( array1[0], array2[0] ) 产生真实的结果?因为它们的值是相等的......
  • 是的。我去了那个网站,它看起来像一些废话。如果他们没有给出具体的、可编译的代码,他们可以声称任何答案都是正确的。
  • 这不应使用 Java 标记。这不是 Java 代码。在 Java ArrayList 中,[] 运算符无法检索条目。例如,您需要使用 array1.get(0)。此外,方法名称中不能有空格,因此 Asserts Equality 不是有效的 Java。最后,如果是java,答案会有所不同。如果它是 java 并且您将使用标准的 junit.framework.Assert.assertEquals,那么答案将是 Pass, Fail, Pass
  • @Alderath 好吧,我知道这家公司从事雇佣 Java 开发人员的业务,所以我认为这一定是 Java 代码——但没有说明。我只是想要一些 Java 大脑给我他们的意见。我真的是 C# / JS 开发人员 - 我的 Java 知识非常有限。感谢您的评论,很抱歉误导您!

标签: java reference assert equality


【解决方案1】:

这不是有效的 Java 语法。你不能打电话给Asserts Equality ()

作为 JUnit 测试中的断言,它必须是 Assert.assertEquals(array[0], array2[0]),这将导致比较两个 Integers。所以这应该通过了。

所以我也不理解您对该代码提出的结果。我会说通过,失败,通过是正确的。

【讨论】:

  • @Miquel:这里没有原始类型。这些值是 IntegerDouble 的自动装箱,因为 Collection 只能保存对象。这就是断言看起来像这样的原因:Assert.assertEquals(Integer.valueOf(1), Double.valueOf(1.0));(返回 false)。
【解决方案2】:

如果标量被“自动装箱”,那么它们将具有不同的对象持有者,因此 == 的测试将是错误的,但字符串将通过 == 测试,因为编译器会确保与使用了一个常数。如果您正在考虑进行 .equals() 测试,那么它们都是相等的。

【讨论】:

  • 我想这可能是 C#(类似),我认为它从一开始就具有自动装箱功能。
  • 在您看来,这个问题足够清楚,足以让具有良好 Java 知识的人准确回答吗?
  • 另外,整数不会被放入整数池中,所以== 会产生true 吗?
  • 在 Java 中,只有字符串(动态)被实习,整数值不会。而且我有很好的 Java 知识并且能够解决它,从某种意义上说,我可以解释他们在说什么,但我不会说那么清楚。
  • 我原以为 Equality 断言会使用 .equals 或一些这样的 value 类型比较...感谢您的回答。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 2016-04-28
  • 2019-12-19
  • 1970-01-01
  • 2011-07-06
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多