簡體   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