2011-07-23 18 views
1

私は、フレームワークGWT、Spring、およびHibernateを持つアプリケーションでTestNGを使用しています。 私のTestNGクラスでは、私は(トランザクションのhibenratetemplateを使用しています)hibernateを使用してデータベースの追加/更新/削除操作を実行するために使用されるDaoImplクラスオブジェクトを作成しようとしています。アプリケーションの実行中に動作します。TestNGがSpring Hibernateを使用してデータベースを更新していません

私はtestngクラスを実行しているときに、DaoImplのBeanオブジェクトを取得でき、データベースからデータを読み取ることができますが、データベースの更新/削除操作を実行しようとしている間は、 DBに変更がないことを意味します。

TestNGを使用してデータベースの更新/削除メソッドをテストすることは可能ですか。 TestNGのクラスの

私のコードは

Public class RoleMgmtDAOImplTest extends AbstractTransactionalTestNGSpringContextTests { 
RoleMgmtDAOImpl roleMgmtDAOImpl; 
    @BeforeClass 
     public void setup() { 
      Assert.assertNotNull(applicationContext); 
      roleMgmtDAOImpl=(RoleMgmtDAOImpl) applicationContext.getBean("roleDAO"); 
      Assert.assertNotNull(roleMgmtDAOImpl); 
    } 
} 

答えて

1

以下の通りである私は、このリンクを見て、適切に取引を設定する必要があると思う:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/testing.html#testcontext-tx

だから、あなたはおそらく必要がありますあなたのクラスの注釈に続いて:

@ContextConfiguration(...)//コンテキストにトランザクションマネージャーを含める必要がありますデフォルトで @TransactionConfiguration(...)//トランザクションマネージャの名前、デフォルト以外の場合
@Transactional

私は(トランザクションは、各テストのために作成され、各テストの終了時にロールバックされますと信じてテストが実行された後はdbに変更が反映されません)。

通常、テストデータを永続化したくありません。そうした場合、あなたはクラスレベルまたは試験レベルで@Rollback注釈付き@TransactionConfiguration注釈内のデフォルトのロールバックの動作を変更することができ、以下を参照してください。アップデート/削除をテストし、Iドンの面では

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/testing.html#integration-testing-annotations

デフォルトのロールバック動作を変更することをお勧めします。代わりに、更新後にオブジェクトを(同じテスト内、したがってトランザクション内で)見つけることができ、変更をアサートします。

+1

これは、Springフレームワークでテストする正しい方法です。しかし、いくつかのデータベース操作が行われたことをテストしたい場合は、その間にセッションをフラッシュ()してクリア()する必要があります。そうしないと、[first level cache](http://docs.jboss.org/ hibernate/core/3.3/reference/ja/html/performance.html#performance-sessioncache)。 –

1

ポイントは、コリンのように@Rollbackアノテーションです。使用されていない場合、実際にはデータベースの変更はデータベースに反映されません。

関連する問題