JUnit 测试中需要
@Before
表示法,因为多个测试需要在运行之前创建类似的对象。
但是我不明白在测试用例函数之前将对象实例化为全局对象与放入 @Before
之间有什么区别。
例如,我正在测试我的国际象棋程序,并且我正在测试我的 Piece 对象是否移动到正确的位置,方法是:
public class PawnTest { //The Test Class itself
Board board = new Board();
@Test
/**
* Testing the right movement
*/
public void correctMovementTest() {
Pawn p1 = new Pawn(Player.UP);
board.placePiece(4, 3, p1);
board.movePieceTo(5, 3, p1);
assertEquals(board.getPiece(5, 3), p1);
}
@Test
/**
* Testing the right movement
*/
public void correctMovementTest2() {
Pawn p1 = new Pawn(Player.UP);
board.placePiece(4, 3, p1);
board.movePieceTo(6, 3, p1);
assertEquals(board.getPiece(6, 3), p1);
}
....
那么,如果我在测试用例方法之外贴上 Board
和 Pawn
p1
不是就可以工作了吗?为什么我们在测试类中需要@Before
?
另外,这样做是行不通的
@Before
public void setup() {
Board board = new Board();
Pawn p1 = new Pawn(Player.UP);
}
我认为这实际上会在测试用例之前设置对象,这样我就不必在每个测试用例上设置它们,但测试用例实际上不会读取 p1 对象和板。
最佳答案
@Before
注释用于在执行类中的每个测试用例之前执行某些操作。所以,基本上你走在正确的道路上。为了使您的代码正常工作,您需要在函数作用域之外声明您的 Board
和 Pawn
。
Board board = null;
Pawn p1 = null;
@Before
public void setup() {
board = new Board();
p1 = new Pawn(Player.UP);
}
还有@BeforeClass
注释可用于在执行整个测试套件之前执行一些操作 - 例如启动嵌入式数据库。
希望对您有帮助!
关于java - Junit 测试中 @Before 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46336915/