0

spring junit ランナーでいくつかのテストを実行する際に問題が発生しています。

私は春に Java 構成を使用しているため、自分に合った例が見つからないようです。

私がやりたいのは、dao クラスの 1 つを使用できる junit テストを作成し、それを hibernate などで動作させることだけですが、そのためには実際の Spring コンテキストでロードする必要があります。

私は次のようにテストクラスを書いてみました:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=HibernateConfig.class, loader=AnnotationConfigContextLoader.class)

public class TestNodeDao {

    @Configuration
    @ComponentScan(basePackages = "com.orclands" )
    static class Config {

        @Bean
        public NodeDao nd() {
            NodeDao nd = new NodeDao();

            return nd;
        }
    }

    @Autowired
    private NodeDao nd;

ただし、 で自動配線することはできませんnodeDao。それは言いNoSuchBeanDefinitionExceptionます。

を自動配線しようとするNodeDaoと実行されますが、春のテストとして実行する唯一のポイントは、実際の春に構成された をテストできるようにすることNodeDaoです。

コンポーネントスキャンなし、コンポーネントスキャンあり、Bean宣言なし、その他の方法も試しましたが、動作しませんでした。

4

1 に答える 1

1

2つのこと...

  1. ローダーを宣言する必要はありません。
  2. 明示的な構成クラスを宣言するとすぐに、デフォルト (つまり、ネストされた静的構成クラス) は検出されなくなります。

だから、次のようなことを試してください:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={HibernateConfig.class, TestNodeDao.Config.class})
public class TestNodeDao {

  @Configuration
  static class Config {

      @Bean
      public NodeDao nd() {
        return new NodeDao();
      }
  }

  @Autowired
  private NodeDao nd;

  // ...
}

または、おそらくさらにクリーンです:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class TestNodeDao {

  @Configuration
  @Import(HibernateConfig.class)
  static class Config {

      @Bean
      public NodeDao nd() {
        return new NodeDao();
      }
  }

  @Autowired
  private NodeDao nd;

  // ...
}

よろしく、

サム

于 2013-02-01T16:32:08.330 に答える