0

単体テストには NUnit を使用しています。私の現在のプロジェクトでは、テストしたいほとんどすべての機能がデータベースに接続されているという問題があります。一方、データベースはアプリケーションの起動時にバインドされます。

私は今とても混乱しています。模擬単体テストについて読んだことがありますが、この問題を正確に処理する方法がわかりません。ここで私のための解決策はありますか?

さらに難しいことに、このデータベースは静的であり、メソッドのパラメーターとしてではありません...これは私をとても混乱させます

4

2 に答える 2

2

アプリケーションのアーキテクチャを確認することをお勧めします。インターフェイスを使用するなどして、データベース レイヤーが疎結合であることを確認します。これにより、データベース層のスタブまたはモックを作成できるようになります。

于 2012-06-22T07:55:06.223 に答える
1

これに対する通常の解決策は、データレイヤーを、よく知られたインターフェイスを実装する別のクラスに保持することです。例えば:

public interface IDataLayer
{
    IEnumerable<Customer> GetAllCustomers();

    Order GetOrderById(int id);
}

実際のデータアクセスに対して通常どおりインターフェイスを実装します

public class SqlServerDataLayer : IDataLayer
{
    // implementation
}

ただし、テストでは、MoqやRhinoMocksなどのモックフレームワークを使用して、テストデータを返すモックデータレイヤーを設定できるようになりました。これにより、クラスがデータをどのように使用するかをテストするだけで済みます。これは理想的です。

[Test]
public void TestGettingCustomersRefreshesViewModel()
{
    //arrange
    var mockDb = new Mock<IDataLayer>();
    mockDb.Setup(db => db.GetAllCustomers()).Returns(new List<Customer>());
    underTest.DataRepository = mockDb.Object;

    //act
    underTest.GetCustomerCommand.Execute();

    //assert
    Assert.That(underTest.CustomerList != null);
}
于 2012-06-22T08:38:33.917 に答える