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

SystemOutRule和调试堆栈的问题

扶高歌
2023-03-14

嘿,我在JUnit(4.12)中的SystemOutRule日志和测试有问题。

我有一个简单的测试类:

package com.example.demo;

import config.FootballerConfig;

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = FootballerConfig.class)
public class FootballerConfigTest {

    @Rule
    public final SystemOutRule log = new SystemOutRule().enableLog();

    @Autowired
    private FootballerStats footballerStats;

    @Autowired
    private Footballer footballer;

    @Test
    public void footballerShouldNotBeNull() {
        assertNotNull(footballer);
    }

    @Test
    public void getPosition() {
        footballerStats.getPosition();
        Assert.assertEquals("I'm playing as defender", log.getLogWithNormalizedLineSeparator().trim());
    }
}
    null

共有1个答案

端木兴国
2023-03-14

好的。我做到了。在getPosition()方法中使用log.clear()就足够了。

@Test
public void getPosition() {
    log.clearLog();
    footballerStats.getPosition();
    Assert.assertEquals("I'm playing as defender\n", log.getLogWithNormalizedLineSeparator());
}
 类似资料:
  • 问题内容: 在Java多线程中,术语和之间在语义上有区别吗? 问题答案: 每个线程都有自己的调用堆栈,“调用堆栈”和“线程堆栈”是同一件事。将其称为“线程堆栈”只是强调了调用堆栈特定于线程。 Bill Venners将此称为Java堆栈: 启动新线程时,Java虚拟机将为该线程创建一个新的Java堆栈。如前所述,Java堆栈将线程的状态存储在离散的帧中。Java虚拟机仅直接在Java堆栈上执行两项

  • 作为一个系统语言,Rust 在底层运作。如果你有一个高级语言的背景,这可能有一些你不太熟悉的系统编程方面的内容。最重要的一个是内存如何工作,通过栈和堆。如果你熟悉类 C 语言是如何使用栈分配的,这个章节将是一个复习。如果你不太了解,你将会学到这个更通用的概念,不过是专注于 Rust 的。 对于大部分内容,当学习他们的时候,我们会使用一个简化的模型来开始。这使得你可以掌握基础,而不会现在就因为不相关

  • 问题内容: 我有两组活动,假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1启动我的App,然后-> B1-> C1在这里我想从C1跳到-> A2在A2处,如果我按回去,它应该存在该应用程序,而不是退回给C1,然后从A2导航到-> B2-> C2。 因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activit

  • 问题内容: 我有一台服务器,可能导致以下输出死亡: 但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。 使用该选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。 有人有任何解决方案或提示来深入了解此问题吗? 问题答案: 看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错

  • 我是一名大学生,学习球拍/方案和C作为我的CS学位的入门课程。 我在网上读到,在C语言中使用迭代而不是递归通常是最佳实践,因为递归由于将堆栈帧保存到调用堆栈上而代价高昂。。。 现在,在类似于Scheme的函数式语言中,递归一直在使用。我知道尾部递归在Scheme中是一个巨大的优势,据我所知,它只需要一个堆栈帧(有人能澄清这一点吗?)无论递归有多深。 我的问题是:非尾递归呢?每个函数应用程序是否保存

  • 问题内容: 内核堆栈和用户堆栈有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,它将存储在哪里?每个进程都有自己的内核堆栈吗?那么,进程如何在这两个堆栈之间进行协调? 问题答案: 内核堆栈和用户堆栈有什么区别? 简而言之,除了在内存中使用不同的位置(并因此为堆栈指针寄存器使用不同的值)之外,什么也没有,而且通常使用不同的内存访问保护。也就是说,在用户模式下执行时,即使映射了内核内存(