2016-10-11 6 views
1

autowiredとすることができるクラスに書くとしましょう。したがって、application contextをロードする必要があります。ベンチマークでアノテーションを使用してアプリケーションコンテキストを読み込む

私のテストは、注釈@org.openjdk.jmh.annotations.State(Scope.Benchmark)とmainメソッド

public static void main(String[] args) throws RunnerException { 
     Options opt = new OptionsBuilder() 
       .include(MyBenchmark.class.getSimpleName()) 
       .forks(1) 
       .build(); 

     new Runner(opt).run(); 
    } 

を持っており、もちろん、私はこのようないくつかのベンチマークを持っている:今

@Benchmark 
public void countAllObjects() { 
    Assert.assertEquals(OBJECT_COUNT, myAutowiredService.count()); 
} 

、質問は私がmyAutowiredServiceを注入んかのですか?

解決策手動

ロード@Setup方法で文脈。

ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/application-context.xml"); 
context.getAutowireCapableBeanFactory().autowireBean(this); 

しかし、私はこの解決策が嫌いです。私は私のテストは、ちょうど注釈

@ContextConfiguration(locations = { "classpath:META-INF/application-context.xml" }) 

を持っているし、私はちょうど

@Autowired 
private MyAutowiredService myAutowiredService; 

のように私のBeanを注入したが、これは動作しないことを好むだろう。私はまた、このように、任意の@Test注釈付きメソッドを持っていないため、これを行うのはポイントがありませんしかし

@RunWith(SpringJUnit4ClassRunner.class) 

:理由は、私が想定し、私は私のテストは、春に実行する必要があります注釈を持っていないということです私はNo runnable methods例外を得るでしょう。

この場合、アノテーションでコンテキストを読み込むことはできますか?

答えて

0

あなたがすでにスケッチしたgetAutowireCapableBeanFactory().autowire()ソリューションを選択します。

アプリケーションコンテキストを読み込んで自動配線を起動する定型コードがいくつかあります。あなたは注釈とアプリの設定を指定する場合は、セットアップの方法は、次のようなものになります:今のところ

AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
context.register(MyBenchmarkWithConfig.class); 
context.refresh(); 
+0

を私はまだ、XMLベースの設定がありますが、私は1日、私は、アノテーションベースのバージョンに移行することを推測します。だから、あなたの答えに基づいて、それは注釈で行うことは不可能だと思われます、それは正しいのですか? – Rufi

+0

これはテストしていませんが、AnnotationConfigWebApplicationContextのアプローチは、MyBenchmarkクラスにxmlファイルを指す@ContextConfigurationを使用して注釈を付けると機能します。 –

関連する問題