0
[TestMethod()]
[Description("Policies: AddReconciliationForDevice")]
public void PL210102()
{
  // arrange
  IDeviceDataFactory dataFactory = new DeviceDataFactoryMock();
  PoliciesLogic target = new PoliciesLogic(dataFactory);
  var po = new PrivateObject(target);
  new PoliciesLogic_Accessor(po)._queueLogic = new QueuesLogic(dataFactory);
  DeviceDataRepositoryMock repository = dataFactory.Create() as DeviceDataRepositoryMock;
  DeviceEntitiesMock model = repository.Entities;
  var changeHelper = new SaveChangesHelper(model);

  //Act
  target.AddReconciliationForDevice(1, new DateTime(2010,01,01));

  // assert;
  Assert.AreEqual(2, changeHelper.Snapshots.Count());
  Assert.AreEqual(1, changeHelper.Snapshots[1].PackageTemplates.Count());
  Assert.AreEqual("Reconcile", changeHelper.Snapshots[1].PackageTemplates.ElementAt(0).Name);
  Assert.AreEqual((int)EnumPackageItemTemplatesCommand.ReconcileData, changeHelper.Snapshots[1].PackageItemTemplates.ElementAt(0).CommandTypeId);
  Assert.AreEqual(1, changeHelper.Snapshots[1].Packages.Count());
  Assert.AreEqual(1, changeHelper.Snapshots[1].PackageItems.Count());
  Assert.AreEqual(1, changeHelper.Snapshots[1].Queues.Count());
  Assert.AreEqual(new DateTime(2010, 01, 01), changeHelper.Snapshots[1].Queues.ElementAt(0).EarliestExecutionTime);
}

エンティティ フレームワークを使用してデータ挿入を単体テストしようとしています。データ リポジトリのモックをセットアップし、リポジトリが保存されるたびにスナップショットを作成して変更を追跡できるヘルパーをセットアップしました。

私の問題は、テストされているメソッド内にあります:

public void AddReconciliationForDevice(int deviceId, DateTime timeToSend)
{
  if (deviceId <= 0) throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "Invalid deviceId value '{0}' seen", deviceId));
  using (IDeviceData repository = DataFactory.Create())
  {
    List<int> devList = new List<int>();
    devList.Add(deviceId);

    // Add PackageTemplate
    var pt = AddPackageTemplate("Reconcile", 28, repository);
    // Add PackageItemTemplate
    var pit = AddPackageItemTemplate(pt, null, repository, EnumPackageItemTemplatesCommand.ReconcileData, 1);
    // Add package
    List<Package> packList = AddPackage(pt, devList, repository, false);
    // Add PackageItem
    AddPackageItem(pit, packList.ElementAt(0), repository);
    // Saves to get packageTemplateId
    repository.SaveChanges();
    // Adds queue
    _queueLogic.AddQueue(pt.Id, deviceId, timeToSend);
  }
}

Idforptは常にゼロです。ef が最初の ID としてゼロを割り当てているか、これが整数のデフォルト値にすぎないかはわかりません。AddQueuept.id がゼロの場合、メソッドはエラーをスローするため、テストは失敗します。

誰でも助けることができますか?

4

1 に答える 1

1

リポジトリをモックしたため、integer のデフォルト値が 0 であることは間違いありません。

_queuesLogicテストメソッドで実際のインスタンスを使用する代わりに、同様にモックする必要があると思います:

new PoliciesLogic_Accessor(po)._queueLogic = new QueuesLogic(dataFactory);//use a mock instead of doing a new

これにより、ID がゼロかどうかを心配する必要がなくなります。

于 2013-05-24T12:53:10.100 に答える