と私はプレイヤーのクラスのコンストラクタを持ってのassertEquals()HashSetの
public Player(String name, String playerDescription,
HashSet<String> abilities) {
this.name = name;
this.playerDescription;
this.abilities = abilities;
}
私はに追加する、私はaddAbilities()
メソッドを作成しました
Player p = new Player ("Jon Snow", "Brave Swordsman", new HashSet<String>());
このクラスのインスタンスを作成しますHashSet
。しかし
public void addAbilities(String newAbility) {
abilities.add(newAbility);
}
、私は
public String getAbility() {
String abilityString = abilities.toString();
return abilityString;
}
私のテスト(getメソッドを使用して)メソッドをテストするために行く:
@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
この方法を作成することをお勧めしましたか?
あなたは文字列にセット全体を変換しているので、あなたが代わりに呼び出すプレーヤー#hasAbility(文字列) ''のようなメソッドを持っている必要があり 'アビリティ#が「私ができる – Rogue
contains'出力が間違っている理由をすぐに知ることができますが、何か他の問題に対処するには、コンストラクタにハッシュセットを受け入れる必要がありますか?コンストラクタの内部に作成するだけではありませんか? – Carcigenicate
引数や変数を 'HashSet'として宣言しないでください。実装が変更される可能性があるので、 'Set'だけを使用してください...また、事前定義された能力のために' enum'を使用してください。 –