java - 我们还需要 JUnit 的 Before 注解吗?

标签 java junit

<分区>

使用 Junit 4.12。 JUnit 的 Before 注释已记录在案,但在我看来它不再需要了。显然,JUnit 会为每个测试创建一个新实例,如以下代码片段所示:

import org.junit.Test;

public class BeforeTest {
TestObject testObject = new TestObject();

@Test
public void one(){
    System.out.println(testObject.status);
    testObject.setStatus("Used by one()");
}

@Test
public void two(){
    System.out.println(testObject.status);
    testObject.setStatus("Used by two()");
}


private class TestObject{
    public String status;

    public TestObject(){
        status = "new";
    }

    void setStatus(String newStatus){status = newStatus;}
}

}

-----------------------------
new
new

我们还需要@Before吗?

最佳答案

如本 similar question ,用@Before注释的方法通常可以用构造函数/字段初始化代替。

存在一些细微的差异,可能会在极端情况下产生影响:

  • 异常处理:@Before 中的异常会导致@After 被调用,而构造函数中的异常则不会
  • 子类初始化:构造函数完成后调用@Before,允许访问子类构造函数产生的任何内容
  • 子类化:使用@Before,您可以覆盖父类的@Before 方法,使用构造函数,您始终需要调用父类构造函数之一。
  • @Rule:构造函数在@Rule方法之前调用,@Before在@Rule方法之后调用

关于java - 我们还需要 JUnit 的 Before 注解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48290343/

相关文章:

java - 使用 Apache Async Http 客户端进行异步响应流

java - 从 java 调用时 shell 脚本中的 Scrapy 命令不执行

java - 模拟具有通用(?扩展集合)返回类型的方法时遇到问题

java - 将 Cucumber 集成到测试框架中?

Atomic 中的 Java 计算

java - Maven 中的依赖问题

java - 根据字符串内容中的搜索模式突出显示单词

junit tearDownClass() 与 tearDown()

java - 使用 fakeRequest 玩 2.5.x junit 测试错误处理

java - Assert 语句中的正则表达式比较