java - Junit 测试中 @Before 的用法

标签 java junit

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);
}

....

那么,如果我在测试用例方法之外贴上 BoardPawn p1 不是就可以工作了吗?为什么我们在测试类中需要@Before

另外,这样做是行不通的

@Before
public void setup() {
    Board board = new Board();
    Pawn p1 = new Pawn(Player.UP);
}

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

最佳答案

@Before注释用于在执行类中的每个测试用例之前执行某些操作。所以,基本上你走在正确的道路上。为了使您的代码正常工作,您需要在函数作用域之外声明您的 BoardPawn

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/

相关文章:

java - 为什么背景是黑色的?

java - java中循环的困惑

java - 逻辑错误,还是对数据流的误解?

Java 从一种异常转换为另一种异常

java - 安全发布的单元测试

java - 为 Jenkins 插件的 Jelly 复选框动态创建变量

java - 尝试连接到 URL 读取 xml 时出现错误 401

java - Vertx ( vertx-Junit5 模块 ) 没有找到测试

java - 找不到类 : org. junit.tests.AllTests - UBUNTU/LINUX

grails - 是否可以在junit中启动grails服务器应用程序