繁体   English   中英

Mocking static 方法抛出参数错误

[英]Mocking static method throws error with parameters

我有自定义 Log4j2 appender:

    @Plugin(
            name = "MyAppender",
            category = "Core",
            elementType = Appender.ELEMENT_TYPE)
    public class MyAppender extends AbstractAppender {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(MyAppender.class);
        private final Lock lock = new ReentrantLock();
    
    
        private MyAppender(final String name, final Layout<? extends Serializable> layout ) {
            super(name, null, layout, false, Property.EMPTY_ARRAY);
        }
    
    
        @Override
        public void append(LogEvent event) {
           ....
        }
    
        @PluginFactory
        public static MyAppender createAppender(
                @PluginAttribute("name") String name,
                @PluginElement("Layout") Layout<? extends Serializable> layout){
            if (layout == null) {
                layout = PatternLayout.createDefaultLayout();
            }
            return new MyAppender(name, layout);
        }
}

我想模拟createAppenderMethod

 try (MockedStatic<MyAppender> mocked = mockStatic(MyAppender.class)) {
            MyAppender appender = Mockito.mock(MyAppender.class);
            mocked.when(() -> MyAppender.createAppender("myAppender", Mockito.any(Layout.class))).thenReturn(appender);
              ....
        }

然而这

org.mockito.exceptions.misusing.WrongTypeOfReturnValue:toString() 不能返回 MyAppender toString() 应该返回 String

我尝试实现toString()方法,但错误仍然存在。

如果你使用mocked.when(() -> MyAppender.createAppender("myAppender", Mockito.anyObject())).thenReturn(appender);

然后我收到:

org.mockito.exceptions.misusing.MissingMethodInvocationException:when() 需要一个必须是“模拟方法调用”的参数。 例如:when(mock.getArticles()).thenReturn(articles);

为什么会这样? 嘲笑这个的正确方法是什么? 到目前为止,这种 mocking static 方法对我有用

根据我的理解 mocking static 方法不好遵循,因为它挑战了设计级别的决策。 如果错了,请有人指导我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM