Setup()和setUpBeforeClass()之间的差异

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

当用JUnit进行单元测试时,有两种类似的方法,setUp()setUpBeforeClass()。这些方法有什么区别?另外,tearDown()tearDownAfterClass()?

签名如下:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}
提问于
用户回答回答于

@BeforeClass@AfterClass带注释的方法将在测试运行期间运行一次--在整个测试的开始和结束时,在运行任何其他方法之前。实际上,它们在构造测试类之前就已经运行了,这就是为什么必须声明它们的原因。

@Before@After方法将在每个测试用例之前和之后运行,因此可能会在测试运行期间多次运行。

因此,假设在类中有三个测试,方法调用的顺序是:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()
用户回答回答于

把“BeForeClass”看作是测试用例的静态初始化器--使用它初始化静态数据--那些不会在测试用例中发生变化的东西。肯定希望小心那些不安全的静态资源。

最后,使用“AfterClass”注释方法来清理在“BeforeClass”注释方法中所做的任何设置。

“前面”&“后”是用于单元测试特定初始化的。我通常使用这些方法初始化/重新初始化我的依赖项的模拟。显然,这种初始化并不是特定于单元测试,而是一般用于所有单元测试。

扫码关注云+社区