java – @BeforeClass vs static {}

前端之家收集整理的这篇文章主要介绍了java – @BeforeClass vs static {}前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用JUnit编写一些测试用例.我需要初始化一些静态变量,这些变量将用于该类中的所有测试用例. @H_403_2@为此,我可以使用

@H_403_2@>静态初始化程序块或
> @BeforeClass的静态方法

@H_403_2@使用一个以上的优点是什么?

解决方法

对于@BeforeClass或静态初始化程序,语义非常不同. @H_403_2@静态初始化器由JVM调用,而不是由JUnit调用.如果静态初始化程序中抛出异常,则测试框架可能无法捕获并报告异常.此外,静态初始化器的调用时间与@BeforeClass方法相比没有明确定义.它将仅在其第一次实际使用中的类加载器运行一次,例如访问静态属性,静态方法或其构造函数之一.有时候,很难弄明白这是什么. (如果你不使用继承:你可能有一天或者同事会重构你的测试用例,如果不是今天,静态初始化器的选择可能会在将来引入讨厌的bug)

@H_403_2@另一方面,在运行每个类的测试之前运行@BeforeClass.如果一个类将受到不同的测试,例如由于基于继承的测试,静态初始化程序将仅针对使用此类的第一次测试运行.这意味着你根据你的测试顺序取决于你不想要什么.

@H_403_2@请注意,两个选项之间的语义差异大于使用@Before或测试的构造函数之间的语义差异.作为最后的论点,考虑注释的纪录片价值.它使您的意图更易读.

@H_403_2@这个规则的唯一例外是不变的常量.这些应在其声明内进行初始化,以保持代码简洁,并且为了尊重compile time constants.如果您的值是可变的,那么您根本不应该使用静态值.再次,在测试中改变的可变值引入了对您的测试的顺序依赖性,这是要避免的.

@H_403_2@TL; DR:使用@BeforeClass!

原文链接:https://www.f2er.com/java/126479.html

猜你在找的Java相关文章