我在XML配置文件中有一些信息(例如log4j2日誌保存文件夾的路徑)並希望在Spring開始加載之前加載它們。但在彈出和拋出異常之前,執行static
或@BeforeClass
(log4j2無法找到系統屬性,我想在XML配置文件加載期間定義它)。JUnit - 如何在Spring開始加載之前運行一個方法?
如何在Spring開始加載之前運行一些方法?
我使用Spring Boot(Start.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 {
運行輸出:
二○一四年十二月二十○日14:15:46614錯誤無法創建文件 $ {SYS:logsPath} /sql.log產生java.io.IOException:Názevsouboru CIadresáře 尼波jmenovka svazku JEnesprávná處 org.apache.logging.log4j.core.appender.rolling java.io.WinNTFileSystem.createFileExclusively(本機方法)在 java.io.File.createNewFile(來源不明)。 RollingFileManager $ RollingFileManagerFactory.createManager(RollingFileManager.java:306) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager $ RollingFileManagerFactory.createManager(RollingFileManager.java:290) at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager。的java:71) 在 org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:60) 在 org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager( RollingFileManager.java:79) 在 org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:184) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)在 sun.ref在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.apache.logging.log4j.core.config .plugins.util.PluginBuilder.build(PluginBuilder.java:135) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:766) 在 org.apache.logging.log4j .core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:698) 在 org.apache.logging.log4j .core.co nfig.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:161) 在 org.apache.logging.log4j.core。 LoggerContext.setConfiguration(LoggerContext.java:359) 在 org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:420) 在 org.apache.logging.log4j.core.LoggerContext.start( LoggerContext.java:138) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:147) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext( Log4jContextFactory.jav a:41) at org.apache.logging.log4j.LogManager.getContext(LogManager。的java:175) 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:102) 在 org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43) 在 org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42) 在 org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29) 在org.slf4j.LoggerFactory。 getLogger(LoggerFactory.java:288)在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java :132 ) 在org.apache.commons.logging.LogFactory.getLog(LogFactory.java:274) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner。(SpringJUnit4ClassRunner.java:86) 在sun.reflect.NativeConstructorAccessorImpl .newInstance0(本地 法)以 sun.reflect.NativeConstructorAccessorImpl.newInstance(來源不明) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 來源)在java.lang.reflect.Constructor.newInstance(來源不明) 在 org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(Anno tatedBuilder.java:86) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.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.createTest(JUnit4TestLoader.java:48) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
二○一四年十二月二十零日14:15:46617 ERROR無法調用類 類org.apache.logging.log4j.core.appender.RollingFileAppender工廠方法用於 元件RollingFile。 java.lang.reflect.InvocationTargetException在在在 sun.reflect.DelegatingMethodAccessorImpl.invoke(來源不明) sun.reflect.NativeMethodAccessorImpl.invoke(來源不明) sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)在 的Java。 lang.reflect.Method.invoke(Unknown Source)at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135) at org.apache.logging.log4j。 core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration。的java:766) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:706) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration。的java:698) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:358) 在 org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration。 java:161) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:359) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java: 420) 在 org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:138) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:147) 在 org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41) 在 org.apache.logging.log4j.LogManager.getContext(LogManager.java:175) 在 有機.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:102) 在 org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43) 在 org.apach e.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42) 在 org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29) 在org.slf4j.LoggerFactory.getLogger(的LoggerFactory的.java:288)在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156) 在 org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132) 在org.apache.commons.logging.LogFactory.getLog(LogFactory.java:274) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner。(SpringJUnit4ClassRunner.java:86) 在sun.reflect.NativeConstructorAccessorImpl。 newInstance0(原生 法)以 sun.reflect.NativeConstructorAccessorImpl.newInstance(來源不明) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 來源)在java.lang.reflect.Constructor.newInstance(來源不明) 在 org.junit。 internal.builders.AnnotatedBuilder.buildRunner在 org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)(AnnotatedBuilder.java:104) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass( RunnerBuilder.java:59) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) at 個org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.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.createTest(JUnit4TestLoader.java:48) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 在 org.eclipse.jdt.internal.junit .runner。RemoteTestRunner.runTests(RemoteTestRunner.java:444) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner。 RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 引起:java.lang.IllegalStateException:無法創建管理器 在 org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:73) 在 org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:60) 在 org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:79) 在 org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:184) ... 43更多
2014-12-20 14:15:46,619錯誤返回給RollingFile的空對象 Appenders。 [20.12.2014 14:15:46.749] PID $ {sys:PID} INFO [main] - WebTestContextBootstrapper:使用TestExecutionListeners: [[email protected]41ee392b, org.springframework.test。 [email protected]9, org.springfra[email protected]57d5872c, org.springframew[email protected]667a738, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener @ 36f0f1be] Static
當您開始測試時,只會執行一次靜態塊。在開始使用實際設置方法之前,課前也只會運行一次。所以我不明白這個問題是什麼。 – SMA
我已經添加了一個控制檯輸出。在log4j2錯誤之後打印static,所以我認爲Spring在靜態執行之前加載。 – Xdg
sys:logsPath是我想在XML配置文件加載期間定義的一個系統屬性(在Spring開始加載log4j2之前)。 – Xdg