【问题标题】:JUnit test difference between assertEquals() and Assert.assertEquals()JUnit 测试 assertEquals() 和 Assert.assertEquals() 的区别
【发布时间】:2017-09-26 14:58:53
【问题描述】:

我做了一个方法来计算字符串中给定字符的出现次数。

public Integer numberOf(String str, Character a){}

我尝试使用以下方法正常测试:

@Test
public void test1(){
    Integer result = oc.numberOf("Lungimirante", 'u');
    Assert.assertEquals(1, result);
}

但 Eclipse 抱怨它。

我用谷歌搜索,发现我需要使用它来测试它:

assertEquals(1, result); //it works correctly

而不是:Assert.assertEquals(1, result);

你能解释一下为什么吗?有什么区别?

【问题讨论】:

  • assert[Equals,etc.] 方法调用来自junit.framework.Assert 类(或org.junit.Assert 等)的静态导入。可能你有一个import static junit.framework.Assert.* 或类似的声明,但你实际上并没有导入junit.framework.Assert
  • @Mena: yes to use assertEquals I import: import static org.junit.Assert.assertEquals; and before to use Assert.assertEqualsonly import org.junit.Assert;
  • 我讨厌自动装箱,这也是原因之一。将NullPointerExceptions 带到您意想不到的地方是另一回事。因此,我将 Eclipse 配置为将自动装箱的发生视为错误(恕我直言,它不言而喻,这是一个选项,我的观点并没有那么错)

标签: java eclipse testing junit assert


【解决方案1】:

您没有为此提供任何详细信息:

Eclipse 抱怨它。

我怀疑是Ambiguous method call ...

...这是由assertEquals 的多个“形式”引起的,其中一些需要 int、一些 long、一些 Object、一些 String 等。

因此,您只需要明确说明要使用哪一个。例如,以下两个assertEquals 调用都可以编译,因为它们明确了expectedactual 参数的类型

Integer result = oc.numberOf("Lungimirante", 'u');
Assert.assertEquals(new Integer(1), result);
Assert.assertEquals(1, result.intValue());

【讨论】:

  • :抱怨:方法 assertEquals(Object, Object) 对于 Assert 类型不明确
  • @SwampThing 是的,这就是我的假设,所以我的回答与您的问题相关。只需调整您的 assertEquals 调用(使用我的答案中提供的示例),以便您清楚 expectedactual 参数的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2012-11-20
  • 2012-05-02
相关资源
最近更新 更多