[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);
}
}
Id
forpt
は常にゼロです。ef が最初の ID としてゼロを割り当てているか、これが整数のデフォルト値にすぎないかはわかりません。AddQueue
pt.id がゼロの場合、メソッドはエラーをスローするため、テストは失敗します。
誰でも助けることができますか?