0

春のブートで小さな Web アプリケーションを作成しました。TestNG は初めてです。データベース操作のために dao を呼び出す testng でサービスをテストしようとしています。inmemory database を使用して実行しようとしていますHSQL

以下は私のUserService

@Service
class UserServiceImpl implements UserService
{
    public void save(User user)
    { 
        userDao.save(user);
    }

    public User update(user)
    {
        userDao.update(user);
    }
}

以下は私のUserTestクラスです

@Test
class UserTest
{
    ?
}

DataProviderでTestNGを使用して UserService でテストおよびメソッドを実行するためにHSQLを使用する良い方法は何ですか? 質問に関してさらに情報が必要な場合はお知らせください;)saveupdate

あなたの応答は大歓迎です!!

4

2 に答える 2

2

dao が正しく呼び出されているかどうかをテストするだけの場合は、モック フレームワーク (私は Mockito を選択します) でモックし、サービスによって正しいメソッドが呼び出されたことを確認します。テストはdaoとサービスの明確な分離を反映しているため、これはより「ユニット」に似ています。

インスタンスを作成/ロードするための実際の DB 通信に関心がある場合は、h2 のようなメモリ内データベースを使用して、そのデータベースに対して dao を実行できます。これはどちらかというと統合テストになりますが、それでも有用な場合があります。

いずれにせよ、データソースとモックを扱うテスト アプリケーション コンテキストを設定します。

于 2015-02-26T10:05:20.437 に答える
0

Acolyte は、そのような目的 (モックアップ、テストなど) のために設計された JDBC ドライバーとツールを提供します: https://github.com/cchantep/acolyte

すでにいくつかのオープン ソース プロジェクト (Anorm、Youtube Vitess など) で、バニラ Java または Scala DSL を使用して使用されています。

handler = handleStatement.withQueryDetection(...).
  withQueryHandler(/* which result for which query */).
  withUpdateHandler(/* which result for which update */).

// Register prepared handler with expected ID 'my-unique-id'
acolyte.Driver.register("my-unique-id", handler);
// then ...
Connection con = DriverManager.getConnection(jdbcUrl);
// ... Connection |con| is managed through |handler|

注: 私は Acolyte の作成者です。

于 2015-04-01T07:59:25.750 に答える