- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类(class):
public class Game {
@Getter
private String gameId;
private String player1Id;
private String player2Id;
private String currentPlayer;
private Board board;
public Game() {
board = new Board();
gameId = UUID.randomUUID().toString();
}
public void joinGame(String playerUUID) {
if (player1 == null) {
player1 = playerUUID;
currentPlayer = player1;
} else if (player2 == null) {
player2 = playerUUID;
} else {
throw new IllegalArgumentException("Cannot join");
}
}
.....
}
我想测试 joinGame() 方法中的逻辑:
@Test
void testJoinGame() {
String player1Id = UUID.randomUUID().toString();
String player2Id = UUID.randomUUID().toString();
game.joinGame(player1Id);
game.joinGame(player2Id);
// this won't compile of course as fields are private
assertEquals(player1Id, game.player1Id);
assertEquals(player2Id, game.player2Id);
assertEquals(player1Id, game.currentPlayer);
}
在我的 JUnit 测试中有两件我不应该做的坏事,正如我经常读到的那样:1. 更改字段的可见性以使测试工作。2. 使用反射获取私有(private)字段的值。(我可以看到这两种方法在我从事的项目中被大量使用,但我们假设它们没有被使用)。
此外,有时我读到如果我想测试我的私有(private)字段,则意味着类的接口(interface)定义错误。
但我要说的是,在这个例子中情况并非如此:两个用户 ID 仅在类内部使用,没有必要公开它们。我仍然想确保顺序是正确的:第一个尝试加入游戏的用户将是 player1(+ 他/她将是当前用户,例如将迈出第一步),第二个 - player2。
我想问一下测试这种方法的正确解决方案是什么?
最佳答案
有两种明显的方法。
测试实际使用值的位置。如果变量不在类外使用,为什么它们在那里?在所提供的代码中,您只需要测试是否适本地获得了 IllegalArgumentException
。
添加“获取”方法。
我更喜欢第一个。
关于java - 如何断言已将适当的值分配给私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53698614/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!