使用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 {
}
字符串
4条答案
按热度按时间n1bvdmb61#
@BeforeClass
和@AfterClass
注解的方法将在测试运行期间只运行一次--在整个测试的开始和结束时,在运行其他任何东西之前。事实上,它们甚至在测试类构造之前就已经运行了,这就是为什么必须将它们声明为static
的原因。@Before
和@After
方法将在每个测试用例之前和之后运行,因此在测试运行期间可能会多次运行。假设你的类中有三个测试,方法调用的顺序是:
字符串
z9smfwbn2#
将“BeforeClass”看作是测试用例的静态初始化器--使用它来初始化静态数据--这些数据在测试用例中不会改变。您一定要小心非线程安全的静态资源。
最后,使用“AfterClass”注解的方法来清理您在“BeforeClass”注解的方法中所做的任何设置(除非它们的自我销毁足够好)。
“Before”和“After”用于单元测试特定的初始化。我通常使用这些方法来初始化/重新初始化依赖项的mock。显然,这种初始化并不特定于某个单元测试,而是通用于所有单元测试。
uyto3xhc3#
setUpBeforeClass
只运行一次,就在测试类构造函数之后(在开始执行测试方法之前)setUp
在每个方法执行之前运行tearDown
在每个方法执行后运行tearDownAfterClass
只运行一次,只有在所有其他方法执行完成之后;它是要执行的最后一个方法。fivyi3re4#
the Javadoc:
有时几个测试需要共享计算上昂贵的设置(例如登录到数据库)。虽然这可能会损害测试的独立性,但有时这是必要的优化。使用
@BeforeClass
注解public static void
无参数方法会导致它在类中的任何测试方法之前运行一次。超类的@BeforeClass
方法将在当前类的@BeforeClass
方法之前运行。