jav*_*ert 25 java eclipse junit log4j
出于某种原因,当我运行JUnit测试时,我的Eclipse控制台不再显示Log4j INFO和DEBUG语句.在代码方面没有任何变化,所以它必须与Eclipse配置有关.
我在单元测试中所做的就是以下内容,由于某些原因,只有ERROR语句显示在Eclipse控制台中.为什么?我应该在哪里寻找线索?
public class SampleTest
{
private static final Logger LOGGER = Logger.getLogger(SampleTest.class);
@Before
public void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
LOGGER.info("INFO TEST");
LOGGER.debug("DEBUG TEST");
LOGGER.error("ERROR TEST");
}
}
Run Code Online (Sandbox Code Playgroud)
细节:
小智 21
转到eclipse中的运行配置然后-VM参数添加:-Dlog4j.configuration = log4j-config_folder/log4j.xml
将log4j-config_folder替换为您拥有log4j.xml文件的文件夹结构
Aar*_*lla 11
在log4j.propertiesor log4j.xml文件中查找日志级别.它可能设置为ERROR而不是DEBUG
配置用于BasicConfigurator.configure();设置在调试时设置的基本控制台appender.具有上述设置且没有其他代码(测试除外)的项目应在控制台中生成三行日志记录.我不能说"它对我有用".
您是否尝试使用log4j和junit创建一个空项目,只使用上面的代码并运行它?
另外,为了使@Before方法运行:
@Test
public void testname() throws Exception {
assertTrue(true);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您一次运行多个测试,则每个测试都将在运行前调用init.
在这种情况下,如果您有两个测试,第一个将有一个记录器,第二个测试将再次调用init,使其记录两次(尝试) - 您应该在控制台中获得9行记录,并进行两次测试.
您可能希望使用带注释的静态init方法@BeforeClass来避免这种情况.虽然这也发生在文件中,但您可能希望查看JUnit 4中的TestSuite文档.和/或BasicConfigurator.resetConfiguration();在@AfterClass注释类中调用,以在每个测试类/测试套件之后删除所有记录器.
此外,根记录器可以重复使用,因此如果您在早期运行的测试方法中设置根记录器的级别,它将为稍后运行的所有其他测试保留此设置,即使它们位于不同的文件中也是如此.(重置配置时不会发生).
测试用例 - 这将导致9行日志记录:
import static org.junit.Assert.assertTrue;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
public class SampleTest
{
private static final Logger LOGGER = Logger.getLogger(SampleTest.class);
@Before
public void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
}
@Test
public void testOne() throws Exception {
LOGGER.info("INFO TEST");
LOGGER.debug("DEBUG TEST");
LOGGER.error("ERROR TEST");
assertTrue(true);
}
@Test
public void testTwo() throws Exception {
LOGGER.info("INFO TEST");
LOGGER.debug("DEBUG TEST");
LOGGER.error("ERROR TEST");
assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
更改init方法减少到例外的六行:
@BeforeClass
public static void init() throws Exception
{
// Log4J junit configuration.
BasicConfigurator.configure();
}
Run Code Online (Sandbox Code Playgroud)
您的问题可能是在其他测试类或测试套件中导致的,其中根记录器的日志记录级别设置为ERROR,而不是重置.
您还可以在设置日志记录之前通过重置@BeforeClass方法来测试它.
请注意,这些更改可能会破坏其他测试用例的预期日志记录,直到在所有位置修复为止.我建议尝试在单独的工作区/项目中如何工作,以了解它是如何工作的.
| 归档时间: |
|
| 查看次数: |
100351 次 |
| 最近记录: |