JUnit-如何在Spring开始加载之前运行方法?

JUnit-如何在Spring开始加载之前运行方法?,spring,spring-boot,junit4,Spring,Spring Boot,Junit4,我在XML配置文件中有一些信息,例如log4j2 logs save文件夹的路径,希望在Spring开始加载之前加载它们。但在Spring之前既不执行static也不执行@BeforeClass,并且抛出异常log4j2找不到系统属性,我想在XML配置文件加载期间定义该属性 如何在Spring开始加载之前运行某些方法 我使用springbootstart.class作为入口点 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationCo

我在XML配置文件中有一些信息,例如log4j2 logs save文件夹的路径,希望在Spring开始加载之前加载它们。但在Spring之前既不执行static也不执行@BeforeClass,并且抛出异常log4j2找不到系统属性,我想在XML配置文件加载期间定义该属性

如何在Spring开始加载之前运行某些方法

我使用springbootstart.class作为入口点

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Start.class)
// @ContextConfiguration(classes = { Start.class }, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration
@IntegrationTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class FileUploadTest {

    @Autowired
    private SomeClazz clazz;

    static {
        System.out.println("Static");
        assertNotNull("Conf file is not specified", System.getProperty("conf"));
        ConfigLoader.initConfiguration(System.getProperty("conf"));
    }

    @Before
    public void setUp() {
        System.out.println("setUp");
    }

    @BeforeClass
    public static void oneTimeSetUp() {
        System.out.println("oneTimeSetUp");
    }

    @Test
    public void myTest() throws IOException {
运行输出:

2014-12-20 14:15:46614无法创建文件时出错 ${sys:logsPath}/sql.log java.io.IOException:Název souboruči adresáře 内波·杰梅诺夫卡·斯瓦茨库 位于的java.io.WinNTFileSystem.CreateFileExclusiveLynaive方法 java.io.File.createNewFileUnknown源位于 org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManagerRollingFileManager.java:306 在 org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManagerRollingFileManager.java:290 在 org.apache.logging.log4j.core.appender.AbstractManager.getManagerAbstractManager.java:71 在 org.apache.logging.log4j.core.appender.OutputStreamManager.getManagerOutputStreamManager.java:60 在 org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManagerRollingFileManager.java:79 在 org.apache.logging.log4j.core.appender.RollingFileAppender.createAppenderRollingFileAppender.java:184 在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法在 sun.reflect.NativeMethodAccessorImpl.invokeUnknown源位于 sun.reflect.DelegatingMethodAccessorImpl.invokeUnknown源位于 java.lang.reflect.Method.invokeUnknown源代码位于 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.buildPluginBuilder.java:135 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObjectAbstractConfiguration.java:766 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfigurationAbstractConfiguration.java:706 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfigurationAbstractConfiguration.java:698 在 org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigureAbstractConfiguration.java:358 在 org.apache.logging.log4j.core.config.AbstractConfiguration.startAbstractConfiguration.java:161 在 org.apache.logging.log4j.core.LoggerContext.setConfigurationLoggerContext.java:359 在 org.apache.logging.log4j.core.LoggerContext.reconfigureLoggerContext.java:420 在 org.apache.logging.log4j.core.LoggerContext.startLoggerContext.java:138 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContextLog4jContextFactory.java:147 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContextLog4jContextFactory.java:41 在 org.apache.logging.log4j.LogManager.getContextLogManager.java:175 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContextAbstractLoggerAdapter.java:102 在 org.apache.logging.slf4j.Log4jLoggerFactory.getContextLog4jLoggerFactory.java:43 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLoggerAbstractLoggerAdapter.java:42 在 org.apache.logging.slf4j.Log4jLoggerFactory.getLoggerLog4jLoggerFactory.java:29 位于org.slf4j.LoggerFactory.getLoggerLoggerFactory.java:288 org.apache.commons.logging.impl.SLF4JLogFactory.getInstanceSLF4JLogFactory.java:156 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstanceSLF4JLogFactory.java:132 位于org.apache.commons.logging.LogFactory.getlogfactory.java:274 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.SpringJUnit4ClassRunner.java:86 位于sun.reflect.nativeConstructor附件mpl.newInstance0Native 方法在 sun.reflect.nativeConstructor附件mpl.newInstance未知源 在sun.reflect.delegatingConstructor或AccessorImpl.newInstanceUnknown 源代码位于java.lang.reflect.Constructor.newInstanceUnknown Source 在 org.junit.internal.builders.AnnotatedBuilder.buildRunnerAnnotatedBuilder.java:104 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClassAnnotatedBuilder.java:86 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClassRunnerBuilder.java:59 在 org.junit.internal.builders.AllDefaultPossibilitysBuilder.RunnerForClassAllDefaultPossibilitysBuilder.java:26 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClassRunnerBuilder.java:59 在 org.junit.internal.requests.ClassRequest.getRunnerClassRequest.java:33 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.JUnit4TestReference.java:33 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.JUnit4TestClassReference.java:25 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTestJUnit4TestLoader.java:48 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader .loadTestsJUnit4TestLoader.java:38 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:444 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:675 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runRemoteTestRunner.java:382 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.mainRemoteTestRunner.java:192

2014-12-20 14:15:46617错误无法在类中调用工厂方法 类org.apache.logging.log4j.core.appender.RollingFileAppender for 元素滚动文件。java.lang.reflect.InvocationTargetException位于 sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于 sun.reflect.NativeMethodAccessorImpl.invokeUnknown源位于 sun.reflect.DelegatingMethodAccessorImpl.invokeUnknown源位于 java.lang.reflect.Method.invokeUnknown源代码位于 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.buildPluginBuilder.java:135 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObjectAbstractConfiguration.java:766 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfigurationAbstractConfiguration.java:706 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfigurationAbstractConfiguration.java:698 在 org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigureAbstractConfiguration.java:358 在 org.apache.logging.log4j.core.config.AbstractConfiguration.startAbstractConfiguration.java:161 在 org.apache.logging.log4j.core.LoggerContext.setConfigurationLoggerContext.java:359 在 org.apache.logging.log4j.core.LoggerContext.reconfigureLoggerContext.java:420 在 org.apache.logging.log4j.core.LoggerContext.startLoggerContext.java:138 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContextLog4jContextFactory.java:147 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContextLog4jContextFactory.java:41 在 org.apache.logging.log4j.LogManager.getContextLogManager.java:175 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContextAbstractLoggerAdapter.java:102 在 org.apache.logging.slf4j.Log4jLoggerFactory.getContextLog4jLoggerFactory.java:43 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLoggerAbstractLoggerAdapter.java:42 在 org.apache.logging.slf4j.Log4jLoggerFactory.getLoggerLog4jLoggerFactory.java:29 位于org.slf4j.LoggerFactory.getLoggerLoggerFactory.java:288 org.apache.commons.logging.impl.SLF4JLogFactory.getInstanceSLF4JLogFactory.java:156 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstanceSLF4JLogFactory.java:132 位于org.apache.commons.logging.LogFactory.getlogfactory.java:274 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.SpringJUnit4ClassRunner.java:86 位于sun.reflect.nativeConstructor附件mpl.newInstance0Native 方法在 sun.reflect.nativeConstructor附件mpl.newInstance未知源 在sun.reflect.delegatingConstructor或AccessorImpl.newInstanceUnknown 源代码位于java.lang.reflect.Constructor.newInstanceUnknown Source 在 org.junit.internal.builders.AnnotatedBuilder.buildRunnerAnnotatedBuilder.java:104 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClassAnnotatedBuilder.java:86 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClassRunnerBuilder.java:59 在 org.junit.internal.builders.AllDefaultPossibilitysBuilder.RunnerForClassAllDefaultPossibilitysBuilder.java:26 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClassRunnerBuilder.java:59 在 org.junit.internal.requests.ClassRequest.getRunnerClassRequest.java:33 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.JUnit4TestReference.java:33 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.JUnit4TestClassReference.java:25 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTestJUnit4TestLoader.java:48 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTestsJUnit4TestLoader.java:38 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:444 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:675 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runRemoteTestRunner.java:382 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.mainRemoteTestRunner.java:192 原因:java.lang.IllegalStateException:无法创建管理器 在 org.apache.logging.log4j.core.appender.AbstractManager.getManagerAbstractManager.java:73 在 org.apache.logging.log4j.core.appender.OutputStreamManager.getManagerOutputStreamManager.java:60 在 org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManagerRollingFileManager.java:79 在 org.apache.logging.log4j.core.appender.RollingFileAppender.cre java:184 ... 43多

2014-12-20 14:15:46619为中的RollingFile返回了错误Null对象 阿佩德斯。[20.12.2014 14:15:46.749]PID${sys:PID}INFO[main]- WebTestContextBootstrapper:使用TestExecutionListeners: [org.springframework.boot.test]。IntegrationTestPropertiesListener@41ee392b, org.springframework.test.context.support。DependencyInjectionTestExecutionListener@1e67a849, org.springframework.test.context.support。DirtiesContextTestExecutionListener@57d5872c, org.springframework.test.context.transaction。TransactionalTestExecutionListener@667a738, org.springframework.test.context.jdbc。SqlScriptsTestExecutionListener@36f0f1be] 静止的


我不清楚为什么不调用静态块。但作为一种解决方案,我建议将log4j2.xml添加到src/test/resources中,并删除所有系统属性——JUnit测试不需要登录到文件中


SpringJUnit4ClassRunner然后加载src/test/resources/log4j2.xml,然后执行所有JUnit方法@BeforeClass,@test…

静态块在开始测试时只执行一次。Before类也将在使用实际设置方法开始之前运行一次。所以我真的不明白问题是什么。我添加了一个控制台输出。Static是在log4j2错误之后打印的,所以我认为Spring是在执行Static之前加载的。sys:logsPath是一个系统属性,我想在Spring开始加载log4j2之前的XML配置文件加载期间定义它。将此属性作为jvm参数传递不是一个选项吗?我还没有传递它。我想从XML文件中准备它,然后加载Sprint。