两者的主要区别是什么

  • @Before and @BeforeClass
    • 在JUnit5 @BeforeEach@BeforeAll
  • @After@AfterClass

根据JUnit Api@Before用于以下情况:

编写测试时,通常会发现几个测试在运行之前需要创建类似的对象.

@BeforeClass可用于建立数据库连接.但@Before就不能这么做吗?

推荐答案

标记为@Before的代码在每次测试之前执行,而@BeforeClass在整个测试fixture 之前运行一次.如果您的测试类有10个测试,则@Before个代码将执行10次,但@BeforeClass个代码将只执行一次.

一般来说,当多个测试需要共享相同的计算开销较大的设置代码时,使用@BeforeClass.建立数据库连接属于这一类.您可以将代码从@BeforeClass移到@Before,但测试运行可能需要更长的时间.请注意,标记为@BeforeClass的代码是作为静态初始值设定项运行的,因此它将在创建测试fixture 的类实例之前运行.

JUnit 5中,标签@BeforeEach@BeforeAll相当于JUnit 4中的@Before@BeforeClass.它们的名字更能指示它们运行的时间,解释得比较松散:"在每个测试之前"和"在所有测试之前一次".

Java相关问答推荐

当在具有约束布局的AlertDialogue内部使用时,回收器视图布局宽度很奇怪

在Keycloak测试容器中的测试之间清理数据库

Java Swing绘制gif作为多个JSYS和JLabels的背景

无法从TemporalAccessor获取Instant:{},ISO解析为2024-04- 25 T14:32:42类型为java.time. form.Parsed

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

如何计算内循环的时间复杂度?

OpenJDK、4K显示和文本质量

Java中不同包中的类之间的配置共享

使用包私有构造函数强制子类Java类

Oracle DUAL表上使用DDL时jOOQ问题的解析'

在AnyLogic中增加变量计数

为什么我们不能实现两个接口,其中一个接口有相同的签名,其中一个接口有默认的实现在java?'

Java inline Double条件和值解装箱崩溃

AssertJ Java:多条件断言

获取字符串中带空格的数字和Java中的字符

在settings.gradle.kts和Build.gradle.kts中使用公共变量

如何在ApacheHttpClient 5中为单个请求设置代理?

在Java中将.GRF转换为图像文件

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯

如何使用stream.allMatch()为空流返回false?