0

Microsoft Fakes Frameworkを使用して、レコードを挿入する方法をテストする単体テストに取り組んでいます。TransportControllerTestTransportManagerおよびの 3 つのクラスがありDbControllerます。TransportControllerTestユニットテストクラスです。これTransportManagerはビジネス ロジック層の一部であり、DbController3 つのメソッド (挿入、取得、および削除) があります。これらの最後のメソッドは、ADO.NETを使用してデータベースにアクセスします。

私の単体テストでは、挿入メソッドをテストしたいと思いTransportControllerます。このコントローラは と を2dbController回呼び出します。最後の呼び出しは、最初の呼び出しで挿入に使用されたパラメーターを渡すことによって、最後に生成されたキーを提供します。では、次のように呼び出して、生成された ID にアクセスできます。dbController.insert()dbController.get()TransportController

    string val = dt.Rows[0]["id"].ToString();
    int id = Int32.Parse(val);

上記の値をモックしたいので、次の式は true です。

    dt.Rows[0]["id"].ToString().Equals("*mocked id*");

私は次のことを試しました:

    DataTable dt = new DataTable(dataSetName);
    dt.Columns.Add("id");
    DataRow dr = dt.NewRow();
    dr.ItemArray.SetValue(1, 0);
    dt.Rows.Add(dr);

    return dt;

しかし、これはうまくいきません。テストで与えられた式を true にするにはどうすればよいですか?

4

1 に答える 1

1

ここで何を偽造できるかをチェックしました。

var row = new ShimDataRow().Instance;

ShimDataRowCollection
  .AllInstances
  .ItemGetInt32 = (collection, i) => row;

ShimDataRow
  .AllInstances
  .ItemGetString = (dataRow, s) => "*mocked id*";

必要に応じて、データテーブルなどをモックすることも検討してください。これにより、シムからインスタンスをフェッチすることを回避できるからです。

このようにして、System.Data 型の処理を完全に回避し、ロジックに取り掛かります。

于 2013-10-04T17:50:37.993 に答える