我有一个播放器类的构造函数
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;
}