我尝试对我的Spring(使用Maven构建的)项目中的一些方法进行基准测试。我需要在我的项目中的几个字段上使用@Autowired和@Inject。当我运行我的项目时,它可以正常工作。但是,在使用@Autowired/@Inject字段时,JMH总是会出现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()
处出现了空指针异常,更具体地说是在resources
处。
它无法自动装配setResources()。但是,如果我运行我的项目(不包括基准测试),它可以正常工作。
如何在进行基准测试时消除这个Autowired字段的空指针异常?