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