为服务创建测试
Create test for service
此服务创建新玩家并将他们添加到列表中。
@Service
public class PlayerService {
@Autowired
private List<Player> playersList;
@Autowired
private Game game;
public void createPlayers(int players) {
for(int i = 1; i < players; i++) {
Player player = new Player();
player.setPlayerName(i);
playersList.add(player);
}
game.setPlayersList(playersList);
}
}
并且我尝试为此服务编写测试。但它不起作用。有什么想法吗?
@InjectMocks
private PlayerService playerService;
@Mock
private Game game;
@Test
public void addPlayer() {
playerService.createPlayers(1);
assertEquals(1, game.getPlayersList().size());
}
正如许多人所建议的那样,您应该更喜欢构造函数注入而不是字段注入。例如,参见 post on reflectoring.io
生成的代码更容易测试:
@Service
public class PlayerService {
private List<Player> playersList;
private Game game;
public PlayerService(List<Player> playersList, Game game) {
this.playersList = playersList;
this.game = game;
}
public void createPlayers(int players) {
for(int i = 1; i < players; i++) {
Player player = new Player();
player.setPlayerName(i);
playersList.add(player);
}
game.setPlayersList(playersList);
}
}
你的测试代码:
@Test
public void addPlayer() {
var playerList = new ArrayList<Player>();
var game = new Game(...);
var playerService = new PlayerService(playerList, game);
playerService.createPlayers(1);
assertEquals(1, game.getPlayersList().size());
}
如您所见,您可以使用简单的 UnitTest 测试您的 PlayerService。不需要任何模拟框架。
顺便说一句。如果您能告诉我们什么不起作用,那就太好了。什么是意外行为?什么是例外。这将使给出正确答案变得容易得多:)
But it doesn't work. Any ideas whats wrong?
此服务创建新玩家并将他们添加到列表中。
@Service
public class PlayerService {
@Autowired
private List<Player> playersList;
@Autowired
private Game game;
public void createPlayers(int players) {
for(int i = 1; i < players; i++) {
Player player = new Player();
player.setPlayerName(i);
playersList.add(player);
}
game.setPlayersList(playersList);
}
}
并且我尝试为此服务编写测试。但它不起作用。有什么想法吗?
@InjectMocks
private PlayerService playerService;
@Mock
private Game game;
@Test
public void addPlayer() {
playerService.createPlayers(1);
assertEquals(1, game.getPlayersList().size());
}
正如许多人所建议的那样,您应该更喜欢构造函数注入而不是字段注入。例如,参见 post on reflectoring.io
生成的代码更容易测试:
@Service
public class PlayerService {
private List<Player> playersList;
private Game game;
public PlayerService(List<Player> playersList, Game game) {
this.playersList = playersList;
this.game = game;
}
public void createPlayers(int players) {
for(int i = 1; i < players; i++) {
Player player = new Player();
player.setPlayerName(i);
playersList.add(player);
}
game.setPlayersList(playersList);
}
}
你的测试代码:
@Test
public void addPlayer() {
var playerList = new ArrayList<Player>();
var game = new Game(...);
var playerService = new PlayerService(playerList, game);
playerService.createPlayers(1);
assertEquals(1, game.getPlayersList().size());
}
如您所见,您可以使用简单的 UnitTest 测试您的 PlayerService。不需要任何模拟框架。
顺便说一句。如果您能告诉我们什么不起作用,那就太好了。什么是意外行为?什么是例外。这将使给出正确答案变得容易得多:)
But it doesn't work. Any ideas whats wrong?