【问题标题】:Mockito: How can I mock the logger found using the @Slf4JMockito:如何模拟使用@Slf4J 找到的记录器
【发布时间】:2021-04-30 15:07:29
【问题描述】:

有没有办法在不使用 powermock 的情况下模拟 @Slf4j 中的记录器?当使用这个注解时,它会创建一个像这样的记录器

private static final Logger log = LoggerFactory.getLogger(Sample.class);

我知道标准mockito 不支持静态模拟,所以我试图找到一种重构方法,使其变为非静态。我希望记录器像默认的 @Slf4j 记录器一样工作,但在测试中我只希望记录器在调用时不执行任何操作。

这就是我试图让我的测试类看起来像的样子。

    @ActiveProfiles("test")
    @RunWith(SpringRunner.class)
    @SpringBootTest
        public class SampleTest {
            @Mock
            //This is where I want my logger to be mocked
            Logger log;

            Sample sample;

        @Before
        public void setup(){
            MockitoAnnotations.initMocks(this);
            doNothing.when(log.debug(anyString()));
    }

任何见解将不胜感激。

【问题讨论】:

    标签: java unit-testing logging mocking mockito


    【解决方案1】:

    我认为你不能这样做,因为 Lombok 在编译时注入代码,而 Mockito 在运行时模拟。

    如果您只想让日志消息消失,您可以在 application-test.properties 或 application-test.yml 中相应地设置日志级别。记录器仍会在那里,但什么也不做(几乎)。

    【讨论】:

      【解决方案2】:

      您可以使用https://www.simplify4u.org/slf4j-mock/ 库。

      通过将org.simplify4u:slf4j-mock 添加到项目依赖项 - 您的代码应该可以正常工作而无需更改。

      【讨论】:

        猜你喜欢
        • 2022-07-01
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        相关资源
        最近更新 更多