私は、PlayアプリケーションでSpringアノテーションベースの設定を使用しています。Spring:実際のオブジェクトの代わりにモックを作成する
コントローラとDAOはSpring Beanです。コントローラ層とDAO層は異なるSpringプロファイルで定義され、各層は個別に無効にすることができます。
コントローラレイヤーをDAOレイヤーから分離してテストしたいと思います。私はDAOのプロフィールを無効にし、それぞれのDAO beanをMockitoモックとして再定義しました。機能的な観点から、私は好きではない唯一のものは、次のように手動でモックを定義して、正常に動作します:
@Configuration
@Import(AppContext.class)
public class TestAppContext {
@Bean
public DaoA getDaoA(){
return mock(DaoA.class);
}
//... all dependencies are re-defined manually
}
(@ComponentScan
注釈付きのような)パッケージ を定義し、中にすべてのBeanを取得する方法はありますそのパッケージを実際のオブジェクトの代わりにモックとして使用しますか?
UPD: 私はFakeApplication
(https://www.playframework.com/documentation/2.0/api/java/play/test/FakeApplication.html)でテストを実行しています。そのため、コンテキストはテストレベルではなく、偽のアプリケーションの起動時に開始されます。
public class ControllerTest extends WithApplication {
@Before
public void setUp() throws Exception {
start(fakeApplication(new GlobalSettings(){
private ApplicationContext appContext;
public void onStart(Application app) {
appContext = new AnnotationConfigApplicationContext(TestAppContext.class);
}
@Override
public <A> A getControllerInstance(Class<A> clazz) throws Exception {
return appContext.getBean(clazz);
}
}));
}
...
}
私は、テストの信頼性を高めるとコントローラが実環境でどのように動作するかをテストするためにwan'tので、私はこのようにそれをやった:(
@Test
public void testControllerMethod() {
Result result = route(fakeRequest(GET, "/controller/method"));
assertThat(result).is(...);
}
:
あなたがプログラムでポストプロセッサを登録することができ、自分で
ApplicationContext
を作成しているとコンテキストは完全にコンストラクタにモックを渡します。 – chrylis私はすでにコンストラクタインジェクションを使用しています。私が完全に文脈を必要とする理由は、テストフレームワークが必要とするためです。 –