想問一下,如下的class要怎麼驗證呢?
class Player {
private String name;
private List<Cards> cards;
public Player(String name) {
this.name = name;
}
}
//------------------------------------------
@Test
void parser_player_name() {
List<Player> players = parser.Parse("...略");
Assertions.assertEquals(players, new ArrayList<Player>() {{
add(new Player("Black"));
add(new Player("White"));
}});
自己實際用Junit assertEquals,會因為是動態new出右邊比較的物件
,導致跟players被判定是不同的List(因不同記憶體位置,而被判定失敗)。
我是可以用for..in的方式,將物件裡面每一個值取出,但這樣我想驗證cards又變成有一點麻煩
我查了許多資料,用了許多不同的方式,還是失敗。
所以想來問問看,找尋一下新的方向
感謝
你的Player要實作equals(),此外List的相等性會包含裡頭元素的順序,所以若要比較兩個List也要考慮其順序
你可以使用 JUnit 的 assertIterableEquals() 方法。
範例程式碼:
@Test
void parser_player_name() {
List<Player> players = parser.Parse("...略");
List<Player> expectedPlayers = new ArrayList<>();
expectedPlayers.add(new Player("Black"));
expectedPlayers.add(new Player("White"));
Assertions.assertIterableEquals(expectedPlayers, players);
}