首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >assertEquals()与HashSet

assertEquals()与HashSet
EN

Stack Overflow用户
提问于 2017-08-25 12:32:21
回答 4查看 2.6K关注 0票数 0

我有一个玩家类的构造函数

代码语言:javascript
复制
public Player(String name, String playerDescription,
        HashSet<String> abilities) {

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

我创建这个类的一个实例

代码语言:javascript
复制
Player p = new Player ("Jon Snow", "Brave Swordsman", new HashSet<String>());

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

代码语言:javascript
复制
public void addAbilities(String newAbility) {
    abilities.add(newAbility);
}

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

代码语言:javascript
复制
public String getAbility() {
    String abilityString = abilities.toString();

    return abilityString;
}

我的测试:

代码语言:javascript
复制
@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是一个很好的实践吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-25 12:37:19

HashSet.toString()返回一个字符串,显示[]内部的元素(以及它们之间的,字符)。

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

这是可以断言的:

代码语言:javascript
复制
assertEquals("[Leadership]", s.getAbility());

但我认为你应该改变方法来恢复能力。

这是一种检索和格式化方法吗?在这个意义上重命名该方法。

否则,保留Set抽象,只返回原来的Set

代码语言:javascript
复制
public Set<String> getAbilities(){
  return abilities;
}
票数 4
EN

Stack Overflow用户

发布于 2017-08-25 12:35:26

集合toString输出的格式是"item1,item2,.“。你只有一个项目,所以它是"item1“。

我建议你做这个方法

代码语言:javascript
复制
public Set<String> getAbilities()

或者更好

代码语言:javascript
复制
public Set<Ability> getAbilities()
票数 2
EN

Stack Overflow用户

发布于 2017-08-25 12:47:24

您的代码在几个点上有潜在的缺陷,第一个是

能力是一个集合,所以这个getter不正确,因为它返回一个字符串。

代码语言:javascript
复制
public String getAbility() {
    String abilityString = abilities.toString();

    return abilityString;
}

因此,"getter“返回了一个字符串,java JDK开发人员可以在不通知任何人的情况下更改.作为对这件事的补充

考试失败了..。

您应该在getter中返回一个(不可修改的)集合,并从该集合中检查字符串值是否存在.

代码语言:javascript
复制
Set<String> mySet = new HashSet<>();
mySet.add("Leader");
mySet.contains("Leader");

现在,您已经了解了toString实现hashSet的未来发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45881527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档