24

@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 メソッドはヒットしません。

4

4 に答える 4

26

の唯一のコンテナ管理部分がメソッドである場合Connection@PostContruct、テストメソッドで手動で呼び出します。

@Test
public void test() {
  Connection c = new Connection("dog", "ruff");
  c.init();
  assertEquals("arf arf arf", c.getX1());
}

依存関係など、それ以上のものがある場合でも、手動で注入するか、Sridharが述べたようにSpringTestFrameworkを使用することができます。

于 2012-05-09T11:15:27.160 に答える
14

Spring JUnit Runnerをご覧ください。

スプリングがクラスを構築し、ポスト構築メソッドも呼び出すように、クラスをテストクラスに注入する必要があります。ペットクリニックの例を参照してください。

例えば:

@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();
    }

    // ...
于 2012-05-09T09:28:37.010 に答える
0

@PostConstructオブジェクトの状態を変更する必要があります。そのため、JUnit テスト ケースでは、Bean を取得した後、オブジェクトの状態を確認します。によって設定された状態と同じであれば@PostConstruct、テストは成功です。

于 2012-05-09T09:24:18.897 に答える
-1

デフォルトでは、Spring は @PostConstruct および @PreDestroy アノテーションを認識しません。これを有効にするには、'CommonAnnotationBeanPostProcessor' を登録するか、Bean 構成ファイルで '' を指定する必要があります。

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

また

<context:annotation-config />

于 2012-05-09T09:53:39.790 に答える