我正在为一些遗留代码创建一些 junit 测试。在这些类中,有许多对作为 java.util.logging.Logger 的自定义子类的记录器的调用。对于每次调用,处理记录器的类都会检查记录器是否已初始化,并使用 java.util.logging.LogManager 按名称检索记录器。我遇到的问题是,如果我连续运行两个测试用例,我会得到一个类转换异常。我调查了一段时间,发现当第二个测试运行时,LogManager 找到了 Logger 的现有实例,但是如果我调用logger instanceof MyLogging.class
该记录器,我会得到一个false
,如果我调用logger.getClass()
我会得到MyLogging.class
我的假设是 junit 没有清理两个测试之间的所有资源。记录器的一个实例保留在内存中,但不知何故它被强制转换为超类。
我试图@After
在我调用的方法中创建一个用 ,注释的 tearDown 方法LogManager.reset()
。它没有用,javadoc说这个方法删除了所有的处理程序,但它没有提到记录器,所以它似乎不是我需要的功能。我搜索了整个文档以找到删除记录器的方法,但我找不到任何东西。
我不知道它是否相关,但 5 个测试类中有 2 个注释为:@RunWith(PowerMockRunner.class)
任何关于如何正确清理资源或删除记录器的想法都非常感谢。