我有一个播放器类的构造函数

public Player(String name, String playerDescription,
        HashSet<String> abilities) {

            this.name = name;
            this.playerDescription;
            this.abilities = abilities;
}


我创建了该类的一个实例

Player p = new Player ("Jon Snow", "Brave Swordsman", new HashSet<String>());


我创建了一个addAbilities()方法,以添加到HashSet中。

public void addAbilities(String newAbility) {
    abilities.add(newAbility);
}


但是,当我去测试方法时(使用get方法)

public String getAbility() {
    String abilityString = abilities.toString();

    return abilityString;
}


我的测试:

@Test
public void testAddAbility() {
Player p = new Player("Jon Snow", "Brave Swordsman", new HashSet<String>());

    s.addAbility("Leadership");
    assertEquals("Leadership", s.getAbility());
}


我在测试输出中得到了不同。

比较失败:预期:<[Leadership]>,但为<[[Leadership]]>

我的问题是,为什么输出会有所不同?以这种方式制作HashSet是一种好习惯吗?

最佳答案

HashSet.toString()返回一个字符串,该字符串显示[]中的元素(并且元素之间带有,字符)。

因此,在您的断言中,您将Leadership[Leadership]进行了比较。

对于断言这没关系:

assertEquals("[Leadership]", s.getAbility());


但是我认为您应该更改检索能力的方法。
它是一种检索和格式化方法吗?
从这种意义上重命名该方法。

否则,保留Set抽象并按原样返回Set

public Set<String> getAbilities(){
  return abilities;
}

09-12 10:35