如何在Spring中模拟task:executor

huangapple 未分类评论59阅读模式
英文:

How to mock task:executor in Spring

问题

@Component
public class SampleApplication {

    private static final Logger LOGGER = Logger.Factory.getLogger();
    private KafkaProducer<String, String> producer = null;

    public SampleApplication() {}

    @Async(value = "audit-task-executor")
    public void sendMessageToExternalKafka(String casterMessage) throws IOException {}
}

在 spring bean.xml 中:

<task:executor id="audit-task-executor"
    pool-size="1"
    queue-capacity="1"
    rejection-policy="DISCARD_OLDEST"/>

我想编写一个测试来模拟它,但是无法做到。抛出以下异常。

初始化bean失败;嵌套异常是 java.lang.NoClassDefFoundError: org/springframework/objenesis/SpringObjenesis

我的测试配置:

@Bean(name = "producerExt")
FactoryBean sampleApplication() {
    return new AbstractFactoryBean() {
        @Override
        public Class getObjectType() {
            return SampleApplication.class;
        }

        @Override
        protected SampleApplication createInstance() {
            return mock(SampleApplication.class);
        }
    };
}

@Bean(name = "audit-task-executor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
    return mock(ThreadPoolTaskExecutor.class);
}

实现 FactoryBean 以避免调用 @PostConstruct。


<details>
<summary>英文:</summary>

@Component
public class SampleApplication {

private static final Logger LOGGER = Logger.Factory.getLogger();
private KafkaProducer&lt;String, String&gt; producer = null;

public SampleApplication() {}

@Async(value = &quot;audit-task-executor&quot;)
public void sendMessageToExternalKafka(String casterMessage) throws IOException {}

}

In spring bean.xml 

<task:executor id="audit-task-executor"
pool-size="1"
queue-capacity="1"
rejection-policy="DISCARD_OLDEST"/>

I want to write a test to mock it, but not able to do it. Its throwing following exception.

    Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/objenesis/SpringObjenesis

My test configuration:

      @Bean(name = &quot;producerExt&quot;)
    FactoryBean sampleApplication() {
        return new AbstractFactoryBean() {
            @Override
            public Class getObjectType() {
                return SampleApplication.class;
            }

            @Override
            protected SampleApplication createInstance() {
                return mock(SampleApplication.class);
            }
        };
    }

    @Bean(name = &quot;audit-task-executor&quot;)
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        return mock(ThreadPoolTaskExecutor.class);
    }

Implemented FactoryBean to avoid invocation of @PostConstruct

</details>


huangapple
  • 本文由 发表于 2020年7月29日 00:21:41
  • 转载请务必保留本文链接:https://java.coder-hub.com/63138590.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定