当前位置: 首页 > 知识库问答 >
问题:

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

甄成弘
2023-03-14

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

如何在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 {

运行输出:

2014-12-20 14:15:46,614 ERROR无法创建文件${sys: logsPath}/anager.java:79org.apache.logging.log4j.core.appender.IOException: Název souboruči adresáèe nebo jmenovka svazku je nesprávnáatppender.createWinNTFileSppender.java:184FileExure(本机方法)atsun.reflect.Fmpl.invokeNewFile(未知来源)atsun.reflect.RollingFileManager$RollingFileManagerFmpl.invokeManager(RollingFileManager.java:306)atorg.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:290)atorg.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71)atorg.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:60)atorg.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileMsql.log)atjava.io.RollingFileAjava.io.Appender(RollingFileAystem.create)atjava.io.NativemetodAccessorIile.create0(本机方法)atorg.apache.logging.log4j.core.appender.rolling.NativemetodAccessorIactory.create(未知来源)AbstractConfiguration. start(AbstractConfiguration. java: 161)在org. apache. log. log4j. core。LoggerConfiguration. setConfiguration(LoggerConfigent. java: 359)在org. apache. log. log4j. core。LoggerConfigure. reconfiure(LoggerContext. java: 420)在org. apache. log. log4j. core。LoggerContext. start(LoggerContext. java: 138)在org. apache. log. log4j. core. imp。Log4jContextFacory. getContext(Log4jContextFacory. java: 147)在org. apache. log. log4j。LogManager. getContext(LogManagement)AllDefaultPossibilitiesBuilder. runnerForClass(AllDefaultPossibilitiesBuilder. java: 26)在org. jitit. runners. model。RunnerBuilder. SafRunnerForClass(RunnerBuilder. java: 59)在org. jlipse. jdt. interal. Junit4. runner。JUnit4Test参考。(JUnit4Test参考. java: 33)在org. eclipse. jdt. interal. Junit4. runner。JUnit4TestClass参考。(JUnit4TestClassReduce. java: 25)在org. eclipse. jdt. interal. Junit4. runner。JUnit4TestLoader. createTest(JUnit4TestLoader. java: 48)在org. eclipse. jdt. interal. jun

2014-12-20 14:15:46617错误无法在类org中调用工厂方法。阿帕奇。日志记录。log4j。果心阿佩德。元素RollingFile的RollingFileAppender。JAVA朗,反思一下。对太阳的攻击。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(未知源代码)。朗,反思一下。方法在组织中调用(未知源)。阿帕奇。日志记录。log4j。果心配置。插件。util。插件生成器。在org上构建(PluginBuilder.java:135)。阿帕奇。日志记录。log4j。果心配置。抽象配置。org上的createPluginObject(AbstractConfiguration.java:766)。阿帕奇。日志记录。log4j。果心配置。抽象配置。在org上创建配置(AbstractConfiguration.java:706)。阿帕奇。日志记录。log4j。果心配置。抽象配置。在org上创建配置(AbstractConfiguration.java:698)。阿帕奇。日志记录。log4j。果心配置。抽象配置。org上的doConfigure(AbstractConfiguration.java:358)。阿帕奇。日志记录。log4j。果心配置。抽象配置。在org上启动(AbstractConfiguration.java:161)。阿帕奇。日志记录。log4j。果心争吵的背景。org上的setConfiguration(LoggerContext.java:359)。阿帕奇。日志记录。log4j。果心争吵的背景。在org上重新配置(LoggerContext.java:420)。阿帕奇。日志记录。log4j。果心争吵的背景。从org开始(LoggerContext.java:138)。阿帕奇。日志记录。log4j。果心impl。Log4jContextFactory。getContext(Log4jContextFactory.java:147)位于org。阿帕奇。日志记录。log4j。果心impl。Log4jContextFactory。getContext(Log4jContextFactory.java:41)位于org。阿帕奇。日志记录。log4j。后勤经理。getContext(LogManager.java:175)位于org。阿帕奇。日志记录。log4j。spi。抽象逻辑适应。getContext(AbstractLoggerAdapter.java:102)位于org。阿帕奇。日志记录。slf4j。Log4jLoggerFactory。getContext(Log4jLoggerFactory.java:43)位于org。阿帕奇。日志记录。log4j。spi。抽象逻辑适应。getLogger(AbstractLoggerAdapter.java:42)位于org。阿帕奇。日志记录。slf4j。Log4jLoggerFactory。getLogger(Log4jLoggerFactory.java:29)位于org。slf4j。伐木厂。getLogger(LoggerFactory.java:288)位于org。阿帕奇。平民日志记录。impl。SLF4JLogFactory。getInstance(SLF4JLogFactory.java:156)位于org。阿帕奇。平民日志记录。impl。SLF4JLogFactory。org上的getInstance(SLF4JLogFactory.java:132)。阿帕奇。平民日志记录。伐木厂。org上的getLog(LogFactory.java:274)。springframework。测验上下文junit4。SpringJunia是一名优秀的跑步者。(SpringJUnit4ClassRunner.java:86)在sun。反映国家建筑配件公司。sun的newInstance0(本机方法)。反映国家建筑配件公司。sun的newInstance(未知源)。反映授权构造或AccessorImpl。java上的newInstance(未知源代码)。朗,反思一下。建造师。组织上的newInstance(未知源)。朱尼特。内部的建筑工人。注释生成器。buildRunner(AnnotatedBuilder.java:104)位于org。朱尼特。内部的建筑工人。注释生成器。runnerForClass(AnnotatedBuilder.java:86)位于org。朱尼特。跑步者。模型RunnerBuilder。safeRunnerForClass(RunnerBuilder.java:59)位于org。朱尼特。内部的建筑工人。所有默认可能性生成器。runnerForClass(allDefaultObsabilitiesBuilder.java:26)位于org。朱尼特。跑步者。模型RunnerBuilder。safeRunnerForClass(RunnerBuilder.java:59)位于org。朱尼特。内部的请求。请求上课。getRunner(ClassRequest.java:33)位于org。日食jdt。内部的junit4。跑步者JUnit4TestReference。(JUnit4TestReference.java:33)在org上。日食jdt。内部的junit4。跑步者JUnit4TestClassReference。(JUnit4TestClassReference.java:25)位于org。日食jdt。内部的junit4。跑步者JUnit4TestLoader。在org上创建测试(JUnit4TestLoader.java:48)。日食jdt。内部的junit4。跑步者JUnit4TestLoader。org上的loadTests(JUnit4TestLoader.java:38)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。org上的runTests(RemoteTestRunner.java:444)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。org上的runTests(RemoteTestRunner.java:675)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行(RemoteTestRunner.java:382)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。main(RemoteTestRunner.java:192)由:java引起。lang.IllegalStateException:无法在组织中创建经理。阿帕奇。日志记录。log4j。果心阿佩德。经理。getManager(AbstractManager.java:73)位于org。阿帕奇。日志记录。log4j。果心阿佩德。OutputStreamManager。getManager(OutputStreamManager.java:60)位于org。阿帕奇。日志记录。log4j。果心阿佩德。滚动的。滚动文件管理器。getFileManager(RollingFileManager.java:79)位于org。阿帕奇。日志记录。log4j。果心阿佩德。滚动文件追加器。createAppender(RollingFileAppender.java:184)。。。还有43个

2014-12-20 14:15:46,619ERROR Null对象返回的RollingFile在Appender.[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]静态

共有1个答案

江衡
2023-03-14

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

SpringJUnit4ClassRunner然后加载src/test/resources/log4j2。然后执行所有JUnit方法(@BeforeClass,@Test..)。

 类似资料:
  • 在游戏开始之前,我想显示一条消息,说“游戏开始!”。消息从左到右穿过屏幕,只有当消息已经消失时,游戏才开始。 我遇到的问题是,lifeTable的实例化需要时间,GameScreen在实例化完成之前就开始运行。我解释说: 当我禁用lifeTable时,一切都运行得很顺利,“游戏开始了!”消息从左到右穿过屏幕,游戏开始。 当我启用lifeTable时,当我按下MainMenueScreen中的“Ne

  • 问题内容: 无限期运行,因此该程序永远不会到达终点。不打电话怎么办?(即使我这样称呼,它也会开始运行并转到下一行,不是吗?) 问题答案: 由于尾随的对,你正在运行在错误的线程,在 当前 线程-而不是新线程你创建-并传递 返回值 的的召唤为的说法。期望传递给函数以进行调用,因此只需删除括号并记住启动线程即可: 对于需要参数的目标,可以使用和的参数,也可以使用lambda。例如,要在线程中运行,可以使

  • 我尝试添加到自定义配置类中,但仍然看到相同的问题。

  • 有许多linux发行版可以选择. 我们将会选择三种流行的发行版来尽可能的包括所有听众来避免发行版战争. 基于他们使用系统的包管理系统, 许多linux发行版分成2组. 一组使用RPM(Red Hat Package Manager), 而另一组使用dpkg包管理器. 我们选择两种基于RPM的发行版, CentOS和SUSE, 在企业中流行. 取代使用Debian作为一个基于dpkg的发行版, 我们

  • 问题内容: 我想将当前位置作为请求变量添加到Web视图中加载的URL,以便可以在页面上使用此信息而无需重新加载或额外请求。 我有一个带有shouldOverrideUrlLoading的WebviewClient,但是当使用loadUrl传递请求时,它不会接收请求。我读到可以使用shouldInterceptRequest截取所请求的URL,但是我的API级别为8,所以我真的不想仅为此更改它。 有

  • 我们使用maven surefire插件并行运行测试。由配置文件指定。 我希望在surefire并行运行我的测试之前,每次maven的整个执行过程中只能运行一次方法。我怎么能那么做?