Java 在任何入口点上运行启动代码

Java 在任何入口点上运行启动代码,java,Java,有没有办法确保某些代码在启动时运行,而不管程序使用什么入口点 例如,我的程序在其主入口点的静态初始值设定项中有一些代码,用于检查断言是否已启用。我们有一些未捕获的bug,因为集成测试在没有启用断言的情况下运行。静态初始值设定项没有捕捉到这一点,因为它仅在加载特定类时运行 那么,有没有办法制作一个“程序初始值设定项”:程序启动时始终运行的代码 我可以创建一些每个入口点都必须调用的静态方法,但这意味着每个测试也必须调用它(因为每个单元测试都是入口点)。这看起来相当混乱(很容易忘记添加它,增加了很多混

有没有办法确保某些代码在启动时运行,而不管程序使用什么入口点

例如,我的程序在其主入口点的静态初始值设定项中有一些代码,用于检查断言是否已启用。我们有一些未捕获的bug,因为集成测试在没有启用断言的情况下运行。静态初始值设定项没有捕捉到这一点,因为它仅在加载特定类时运行

那么,有没有办法制作一个“程序初始值设定项”:程序启动时始终运行的代码

我可以创建一些每个入口点都必须调用的静态方法,但这意味着每个测试也必须调用它(因为每个单元测试都是入口点)。这看起来相当混乱(很容易忘记添加它,增加了很多混乱,等等)


有更好的解决方案吗?

您可以使用类似于的东西,它类似于测试类的静态初始值设定项。它将在一开始就运行一次,然后再执行其他操作。

这听起来像是测试套件中的一个bug。修正它,继续前进。除非你给每一个使用断言的类都添加一个静态初始值设定项——不,我看不到这样做的方法?或者不管入口点是什么都加载的类,某种应用程序上下文?@markspace,测试套件确实有一个bug。然而,它直到很晚才被捕获,因为我们意外地在禁用断言的情况下运行测试(Java的默认设置)。确保断言被启用(或硬崩溃)的代码有助于避免将来犯此错误,但这只适用于单个类。这意味着到目前为止,我们有135个测试类,每个测试类都需要另一种方法。我不确定杂乱无章是否值得。正如@A4L所提到的,有测试套件,但是我们必须为所有测试创建一个套件,并维护这个测试列表(我们现在只需创建一个测试文件,Maven就知道如何运行它,这真的很方便)。我不确定我想要的是香草Java。似乎有这样的东西,但我不认为任何Java应用程序都有这样的等价物。测试套件就是这样。让一个带有@BeforeClass方法的超类和扩展这个超类的所有测试类怎么样?显然涉及到不需要的继承层次结构,但它对您有效吗?我自己也没试过,但我觉得试衣是比这个更好的选择。我接受这个答案。我最终决定不去费心实现它(这没什么大不了的——Maven和Jenkins在默认情况下有自己的主张),但它回答了这个问题(尽管无可否认,这不是我所希望的答案)。