私は春にはかなり新しく、Craig Wallsの "Spring in Action"(第4版)を使って勉強します。関心のあるのは、動作しているコードを書く方法だけでなく、Springを使う正しい原則にも関わっています。 5.6リストページ142から次のコードについてコンストラクタ呼び出しで作成されたSpring Beanを使用することが許容される場合はありますか?
、:
public class HomeControllerTest {
@Test
public void testHomePage() throws Exception {
HomeController controller = new HomeController();
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/")).andExpect(view().name("home"));
}
}
私の質問は以下の思考によって生成されます。一般的な理解は春のように依存性注入を使用していることである
- オブジェクトの依存関係の管理オーバーヘッドを削減し、モジュール性を高め、テストやコードの再利用を簡素化します。ただし、コンテナによってBeanを作成して管理する必要があることを意味していませんか?私がこのテーマについて読んで始めたので、私が覚えた最初のディテールでは、
new
はDIに続くコードの中に決して現れてはならないと述べました。 Stateful
beanをテストしたい場合は、これが解決策ですか?つまり、同じインスタンス上で複数の独立したテストを実行する場合、それぞれが同じBeanの状態をテストします。これを行うための適切な注釈があることが分かったとしても(@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
)- (
new
を使用している場合を除いて)他の方法で解決することが困難または不可能なユースケースがありますか?
「手紙に」より多くの実装では、ApplicationContext
を指定する@ContextConfiguration
を使用します。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebConfig.class)
@WebAppConfiguration
public class HomeControllerTest {
@Autowired
HomeController controller;
@Test
public void testHomePage() throws Exception {
MockMvc mockMvc = standaloneSetup(controller).build();
mockMvc.perform(get("/")).andExpect(view().name("home"));
}
}
*別の方法で解決することが困難または不可能な別のユースケースがありますか?これはどういう意味ですか? – CKing
@CKing私は、選択肢がなく、明示的なコンストラクタ(bean = new Bean(...)のように)を使ってBeanを作成する必要がある場合があります。本の例と質問2では、私は代替案を見つけたので、ある問題を解決する唯一の新しい方法が他にあるのか疑問に思っていました。 – aUserHimself