Можно ли получить доступ к BenchmarkParams
в @Setup
в виде @State(Scope.Benchmark)
класса, если этот класс передается в @Benchmark
в качестве параметра?JMH: доступ к BenchmarkParams от метода @Setup из @State класса
Минимальный пример кода (фактическое использование является более сложным, но воспроизводит мой вопрос):
@State(Scope.Benchmark)
public class Test
{
@Setup
public void setUp(BenchmarkParams params){}
@Benchmark
public void nothing(Test test){}
}
Существует базовая JMH sample, но не там, где @State
передается в @Benchmark
метод
Я хотел бы получить BenchmarkParams
в @Setup
для получения/регистрации данных для контрольных тестов, которые я создаю на основе JMH @Param
значения
С образец кода выше:
- Определение
@State(Scope.Benchmark)
класс с именемTest
< --- работает - Определить
@Benchmark
метод, названныйnothing()
< --- работает - Pass
@State
экземпляр в@Benchmark
метод < - - FAILS!
Здесь ошибка:
[ERROR]
/Users/.../jmh-benchmarks/target/generated-sources/annotations/test/generated/Test_nothing_jmhTest.java:[390,16]
method setUp in class test.Test cannot be applied to given
types;
required: org.openjdk.jmh.infra.BenchmarkParams
found:
org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType,org.openjdk.jmh.infra.generated.BenchmarkParams_jmhType
reason: actual and formal argument lists differ in length
Любая помощь приветствуется!
[EDIT 1]
FYI, на мой фактический код также есть @State(Scope.Thread)
класс, что-то подобное:
@State(Scope.Benchmark)
public abstract class TestBase
{
@Setup
public void setUp(BenchmarkParams params){}
}
@State(Scope.Benchmark)
public class TestImpl extends TestBase
{
@State(Scope.Thread)
public static class ThreadState
{
@Setup
public void setUp(TestImpl state){}
}
@Benchmark
public void nothing(ThreadState state){}
}
[EDIT 2]
По JMH 1.3 это уже не проблема