【发布时间】:2017-10-02 09:13:50
【问题描述】:
我尝试对我的 Spring(使用 maven)项目的一些方法进行基准测试。我需要在我的项目中的几个字段上使用@Autowired 和@Inject。当我运行我的项目时,它运行良好。但是 JMH 总是使用 @Autowired/@Inject 字段获得 NullPointerException。
public class Resources {
private List<Migratable> resources;
@Autowired
public void setResources(List<Migratable> migratables) {
this.resources = migratables;
}
public Collection<Migratable> getResources() {
return resources;
}
}
我的基准课程
@State(Scope.Thread)
public class MyBenchmark {
@State(Scope.Thread)
public static class BenchmarkState {
Resources res;
@Setup
public void prepare() {
res = new Resources();
}
}
@Benchmark
public void testBenchmark(BenchmarkState state, Blackhole blackhole) {
blackhole.consume(state.res.getResources());
}
}
当我运行我的基准测试时,它在Resources.getResources() 处得到 NullPointerException
更具体地说,resources。
它不能自动装配 setResources()。但是如果我运行我的项目(不包括基准测试),它工作正常。
如何在基准测试时摆脱带有 Autowired 字段的 NullPointerException?
【问题讨论】:
-
您找到解决方案了吗?
标签: spring maven benchmarking microbenchmark jmh