経験則として、ビジネスロジックを含むものはすべて単体テストできる必要があります。理想的には、すべてのレイヤーがインターフェイスによって分離され、モックされたインターフェイスをさまざまなレイヤーに挿入できる必要があります。外部コンポーネント(ディスク、データベース、ネットワークなど)にアクセスするものもすべて抽象化する必要があります。たとえば、データレイヤーでは、データベースへの接続を開き、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サーバーを作成するなど、単体テストが意味をなさない場合があります。うまくいけば、それらはほとんどなく、その間にあります。