これは実際に私の最初の質問Stackoverflowです。私はそれが最後ではないことを願っていますし、うまくいけば私は自分自身でいくつかの答えに貢献しますInverse HasMany関係のユニットテストにPersistenceSpecificationとCheckListを使用できますか?
私の質問は簡単です。私は逆のHasMany関係をテストしているNUnitテストに悩まされています。 私はそれをデバッグするたびに、出力は "実際のカウントは期待されたカウントと等しくない"となります。私はこの問題についてネットに関する広範な研究を行ってきましたが、そのような単体テストを行うことは不可能だと主張する人々もいます。
これは私の例です。 EmployeeMappingため コード:ここで
Id(x => x.ID).GeneratedBy.Identity();
HasMany(x => x.PositionHistory).KeyColumn("Employee_id").Inverse().Cascade.All();
がEmployeePositionMappingのコードです:
Id(x => x.ID).GeneratedBy.Identity();
References(x => x.EmployeeAtPosition).Cascade.All().Nullable();
ユニットテストはこのようなものです:
var position2 = new EmployeePosition();
position2.ExtraBenefit = 353.00;
position2.Salary = 23300.00;
position2.Region = region;
position2.Department = department;
position2.Year = "2010";
position2.Comment = "kommentar igen...";
position2.History = true;
var positionList = new List<EmployeePosition>();
positionList.Add(position2);
new PersistenceSpecification<Employee>(Session, new CustomEqualityComparer<Employee, long>())
.CheckProperty(p => p.ID, Int64.Parse("1"))
.CheckList(p => p.PositionHistory, positionList, (emp, empPosition) => emp.AddEmployeePosition(empPosition))
.VerifyTheMappings();
私はNULL可能()属性を交換したいと思います参照EmployeeAtPositionプロパティのNot.Nullable()。
エンティティとトランジェントを比較する気になるエンティティベースクラスがあります。 AddEmployeePosition()は、Employee.PositionHistoryとEmployeePosition.EmployeeAtPositionの両方の関係を維持管理します。
出力でNhibernate SQLを見てもOKです。しかし何らかの理由で、私が用意したリスト(positionList)と同じではありません。
その他の有用な事実:私はNhibernate 3.0と流暢なNhibernateバイナリを実行しています。 3日前にそれらをダウンロードしました。マッピングテストを行うためのSQLite InMemoryの使用。
私はあなたのヒントは私を与える可能性のあるすべての良い新しい角度を本当に感謝し...
/よろしくBacceSR-非常に雪のストックホルムから。
私の以前の質問に対するコメント:-)私は今、PersistenceSpecificationを使ってマッピングを検証することができないことを理解しました。エンティティ間の多くの関係はインバース・タイプであるため、このマッピング・テストを手動で行いました。 –