在Junit测试中使用@Before

use*_*790 2 java junit

@Before 需要JUnit测试中的符号,因为几个测试需要在运行之前创建类似的对象.

但是我没有区分在将testcase函数作为全局对象之前实例化一个对象和放入一个对象之间@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);
}

....
Run Code Online (Sandbox Code Playgroud)

如果我在测试用例方法之外进行decalre Board,那么它不会起作用Pawn p1吗?我们为什么需要@Before在测试课上?

此外,这样做是行不通的

@Before
public void setup() {
    Board board = new Board();
    Pawn p1 = new Pawn(Player.UP);
}
Run Code Online (Sandbox Code Playgroud)

我认为这实际上会在测试用例之前设置对象,这样我就不必在每个测试用例中设置它们,但测试用例实际上不会读取p1对象和板.

Ser*_*iev 5

@Before在您的类中执行每个测试用例之前,注释用于执行某些操作.所以,基本上你是在正确的方式.为了使你的代码工作,你需要声明你BoardPawn功能范围之外.

Board board = null;
Pawn p1 = null;

@Before
public void setup() {
    board = new Board();
    p1 = new Pawn(Player.UP);
}
Run Code Online (Sandbox Code Playgroud)

还有一个@BeforeClass注解可用执行一次整个测试套件前执行一些动作-例如启动嵌入式数据库.希望能帮助到你!