@PostConstructメソッドを含むクラスがある場合、JUnitとSpringを使用してそのコンストラクタ、つまり@PostConstructメソッドをテストするにはどうすればよいですか? Springを使用していないため、単にnew ClassName(param、param)を使用することはできません。@ PostConstructメソッドが起動されていません。
ここに明らかなものがないのですか?
public class Connection {
private String x1;
private String x2;
public Connection(String x1, String x2) {
this.x1 = x1;
this.x2 = x2;
}
@PostConstruct
public void init() {
x1 = "arf arf arf"
}
}
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
assertEquals("arf arf arf", c.getX1();
}
これと似たもの(少し複雑ですが)があり、@ PostConstructメソッドがヒットしません。
Spring JUnit Runner をご覧ください。
Springがクラスを構築し、post構築メソッドも呼び出すように、テストクラスにクラスを注入する必要があります。ペットクリニックの例を参照してください。
例えば:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:your-test-context-xml.xml")
public class SpringJunitTests {
@Autowired
private Connection c;
@Test
public void tests() {
assertEquals("arf arf arf", c.getX1();
}
// ...
Connection
の唯一のコンテナー管理部分が@PostContruct
メソッド。テストメソッドで手動で呼び出すだけです。
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
c.init();
assertEquals("arf arf arf", c.getX1());
}
それ以上、依存関係などがある場合でも、手動で挿入するか、またはSridharが述べたように、Springテストフレームワークを使用できます。
デフォルトでは、Springは@PostConstructおよび@PreDestroyアノテーションを認識しません。これを有効にするには、 ‘CommonAnnotationBeanPostProcessor‘を登録するか、Bean構成ファイルで ‘‘を指定する必要があります。
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
または
<context:annotation-config />
@PostConstruct
はオブジェクトの状態を変更している必要があります。したがって、JUnitテストケースでは、Beanを取得した後、オブジェクトの状態を確認します。 @PostConstruct
によって設定された状態と同じであれば、テストは成功です。