0

開発目的でSpringMVC+Hibernateアプリケーションにフィクスチャを追加するための最良のアプローチは何でしょうか。基本的には、アプリケーションが「開発」環境にロードされるときに、特定のフィクスチャのセットがデータベースに事前入力する必要があるという考え方です。いくつかの考慮事項は、DbUnitを使用したり、ハードコードされたSQLをロードしたりしたくないということです。代わりに、エンティティマネージャーを使用してアプリケーション内のフィクスチャを生成し、情報を生成するために必要なときに特定のサービスを使用できるようにします(いくつかのユーザーfixtuを作成したい、idはsaltサービスを使用してパスワードを生成できるようにするなど)。理想的には、ドメインタイプごとに異なるクラスのフィクスチャを分離できるようにしたいと思います。これまでのところ、その意味で役立つものを見つけることができませんでしたか?助けていただければ幸いです、私は完全なSpringの初心者であり、PHPのバックグラウンドを持っているので、どこに行くべきかについてもう少し詳しく説明してください:S。ありがとう!

4

1 に答える 1

1

これは開発用ですよね?ユニットテストや統合テストだけではありませんか?もしそうなら、私はメインでJavaクラスを作成し、そこにデータ作成コードを配置すると思います。そのクラスをデータポピュレーションBeanで自動配線することもできます。次に、すべてのデータポピュレーターに同じインターフェイスを実装させます。メインメソッドに次のように注釈が付けられていることを確認してください。

@ContextConfiguration( "classpath:/META-INF/spring/applicationContext.xml")

これにより、基本的に静的メインメソッドのスプリング構成がロードされます。

次に、データベースをワイプした後にビルドを毎回実行するか、データを入力する必要があるときに手動で呼び出すことができます。

これが単体テスト専用の場合は、テストソースパスにデータポピュレーターを作成し、テスト#setUpメソッドから呼び出します。

次のことを考慮してください。

public interface Populator {
   void run();
}

@Repository
public class UserPopulator {
   @PersistenceContext
   private EntityManager em;

   @Transactional
   public void run() {
      create some users
      em.persist( users );
   }
}


@Repository
public class ThingPopulator {
   @PersistenceContext
   private EntityManager em;

   @Transactional
   public void run() {
      create some thing
      em.persist( thing );
   }
}

@Configurable
@ContextConfiguration( "classpath:/META-INF/spring/applicationContext.xml")
public class DataPopulator {
   @Autowired
   private List<Populator> populators;

   public void run() {
      for ( Populator populator : populators ) {
         populator.run();
      }
   }

   public static void main(String[] args) {
      new DataPopulator().run();
   }
}

次に、開発のためにこのクラスを実行できます。ユーザー専用の単体テストがある場合は、次のこともできます。

public class UserTest {
   @Before
   public void setUp() {
      new UserPopulator().run();
   }

   // tests
}

またはそのようなもの。

于 2013-02-03T19:04:46.190 に答える