我有一个玩家类的构造函数
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;
}
关于java - 带有 HashSet 的assertEquals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45881527/