0

私は非常に積極的にさまざまなレイヤーに分割したプロジェクトを持っています。私は持っています

  • RESTサービス(asp.net Web Api)
  • サービスレイヤー
  • データ層
  • フィルタ(データレイヤーの上にある拡張メソッド)
  • 多数のモデルと個別のDTO
  • DbContext

ユニットテストは何をすべきですか?

技術的には、私のRESTサービスは私のサービスを指しています。したがって、RESTをテストする場合は、サービスもテストしています。

モデル、これらをテストする方法がわかりませんか?

DBContext、これらをテストする必要がありますか?

サービスをテストする場合、DataLayerをテストしています

4

2 に答える 2

1

経験則として、ビジネスロジックを含むものはすべて単体テストできる必要があります。理想的には、すべてのレイヤーがインターフェイスによって分離され、モックされたインターフェイスをさまざまなレイヤーに挿入できる必要があります。外部コンポーネント(ディスク、データベース、ネットワークなど)にアクセスするものもすべて抽象化する必要があります。たとえば、データレイヤーでは、データベースへの接続を開き、SQLステートメントを実行し、接続を閉じる役割を担うコードを抽象化する必要があります。次に、データアクセスインターフェイスをモックアップして、テストするコードをテストできます。この例では、データアクセス層メソッドがモックされています

var mockAdapter = new Mock<IDataAdapter>();
var repo = new Mock<RepositoryObject> (mockAdapter.Object) { CallBase = true };

var param = new Mock<IDbDataParameter>();
param.Setup(mock => mock.Value).Returns("TEST RESPONSE");

var bindParam = new DynamicParameters.ParamInfo { Name = "strResponse", AttachedParam = param.Object };
var paramList = new DynamicParameters();
paramList.Parameters.Add("strResponse", bindParam);

repo.Setup(mock => mock.GetParameters(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<int>(), It.IsAny<string>())).Returns(paramList);

string actual = repo.Object.ExecuteSomeSqlStatement(string.Empty, string.Empty, int.MinValue, string.Empty);

Assert.AreEqual("TEST RESPONSE", actual);

モデルに関する限り、プロパティのみが含まれている場合、モデルをテストする目的はありません。

リスニングポイントを開くTCPサーバーを作成するなど、単体テストが意味をなさない場合があります。うまくいけば、それらはほとんどなく、その間にあります。

于 2012-06-12T15:13:02.677 に答える
0

他の人と同じように、DataLayerをテストするときにRESTサービスレイヤーをモックしてみてください。

単体テストではロジックのみをテストする必要があります。他のシステムまたはコンピューターと対話するコードは、単体テストの範囲に含めないでください(ネットワークIO、DBアクセス、ディスクIO、他のシステムのインターフェイスの呼び出しなど)。

于 2012-06-12T07:47:27.007 に答える