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