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

模拟静态方法用参数抛出错误

徐文斌
2023-03-14

我有自定义的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);
              ....
        }

共有1个答案

狄河
2023-03-14

根据我的理解,模仿静态方法是不好的,因为它挑战设计级别的决策。如果我错了,请有人来指导我。

 类似资料:
  • 编辑: 感谢所有的回复。我找到了解决办法。我试图模拟一个方法findById,它不是直接在User.class中,而是在用户扩展的genericModel.class中。现在一切都很完美。

  • 有没有办法用参数模拟静态方法。 我看到了很多关于这个问题的问题,但是我找不到任何与之相关的问题。

  • 我试图模拟静态,但收到如下错误消息 我的测试类实现就像

  • 在安装到AEM 5.6.1实例之前,我正在使用maven构建和测试我的代码。我已经编写了单元测试,这些测试使用wcm的实现从aem模拟中获益。io和其他需要使用powermockito模拟静态方法的单元测试。 以下是我对aem上下文、sling Mock和powermock的maven依赖关系。 在我的课堂上,我正在为aem上下文设置规则,并准备一些用于模拟的静态类: 当我通过命令行运行mvn测试

  • 问题内容: 我的代码中有一个静态方法,希望以某种方式进行模拟。 我正在使用jmock。 我想可以做到这一点的一种方法是在静态方法周围设置“包装类”并模拟该方法,但是我希望有一个更好的解决方案。 我要用这种错误的方式? 反馈: 我将要有一个接口和一个类,该接口和类具有一个仅称为静态方法的方法。这将允许我通过仅模拟对此包装器类的调用来模拟逻辑。(即使谈论它我也觉得很脏:)) 问题答案: 我们不支持在j

  • 问题内容: 我已经写了一家工厂来生产物体: 我想验证传递给的参数,但不知道如何模拟静态方法。我在测试用例中使用的是和。有没有模拟或验证此特定用例的好方法? 问题答案: 在Mockito上使用PowerMockito。 示例代码: