6

私たちはめちゃくちゃデータ駆動型のアプリケーションを持っています。アプリケーションの単体テストを行いたいのですが、データ量が多いため、開発者は完全に偽のリポジトリを構築することに抵抗があります。私は本当に彼らを責めません。

テストを既存のアプリケーションに後付けしていることを理解してください。最初からやり直す場合は、偽のリポジトリを使用した単体テストを容易にするために、アーキテクチャを大幅に変更します。

既知のmdfファイルをテストとともに配布してコピーし、それを使用してテストを実行したいと思います。このための承認された技術はありますか?私はテストdllへのリソースの埋め込みには精通していますが、mdfの埋め込みには精通していません。


解決策(一種):

最終的に、Linqデータコンテキストのモックに関するAndrew Tokeleyの投稿(http://andrewtokeley.net/archive/2008/07/06/mocking-linq-to-sql-datacontext.aspx)からDataContextWrapperを取得し、FakeDataContext.csを作成しました。それは基本的にリストの束です。

私は本当に野蛮なT4テンプレートを作成し(「select * FROM <#= table.BaseClass.QualifiedName#>」と考えてください)、既知の適切なデータベースからデータをコピーして、次のようなものでいっぱいの巨大なクラスを作成しました。

List<Customer> _customers = new List<Customer>();
_customers.Add(new Customer(){CustomerId = 1, CustomerName = "ACME"});

クラスは25K行ですが、t4がこれらすべての行を書き込むので、誰が気にしますか?これにより、データコンテキストだけをモックできるので、クエリが正しく行われたことをある程度保証して、偽のコンテキストに対してlinqをテストできます。元の開発者は大量のビジネスロジックをリポジトリに配置しているため、既知の適切なデータに対してロジックをテストできます。

4

2 に答える 2

5

共有サーバーにテストデータベースをセットアップして、mdfファイルを展開する必要がないようにすることはできますか?

また、すべての単体テストをTransactionScopeでラップできますか?

私は、すべてのテストのよく知られた参照データを含むテストデータベースを会社で使用し、次のような統合テストの基本クラスを作成しました。

[TestClass]
public class ServiceTest
{
    private TransactionScope Transaction { get; set; }

    [TestInitialize]
    public virtual void TestInitialize()
    {
        Transaction = new TransactionScope();
    }

    [TestCleanup]
    public virtual void TestCleanup()
    {
        Transaction.Dispose();
    }
}

各テストはすべての変更をロールバックするため、データベースを汚染するテストデータに問題はありません。

于 2010-12-15T15:31:40.567 に答える
0

モックフレームワークを見たことがありますか?単体テストしているオブジェクトにデータ依存関係を注入できるようにコードを記述している場合は、それらのデータ依存関係をモックできるはずです。

私はMoqで大きな成功を収めましたが、最初から依存性注入を使用してコードを記述しました。

于 2010-12-15T16:30:07.017 に答える