次の単体テストメソッドがあります。
void TestOrderItemDelete()
{
using (new SessionScope())
{
var order = Order.FindById(1234);
var originalItemCount = order.OrderItems.Count;
Assert.IsTrue(originalCount > 0);
var itemToDelete = order.OrderItems[0];
itemToDelete.DeleteAndFlush(); // itemToDelete.Delete();
order.Refresh();
Assert.AreEqual(originalCount - 1, order.OrderItems.Count);
}
}
DeleteAndFlush コマンドの後のコメントからわかるように、単体テストに合格するには、単純な削除から変更する必要がありました。どうしてこれなの?同じことは、OrderItem を追加するための他の単体テストには当てはまりません。これはうまくいきます:
void TestOrderItemAdd()
{
using (new SessionScope())
{
var order = Order.FindById(1234);
var originalItemCount = order.OrderItems.Count;
var itemToAdd = new OrderItem();
itemToAdd.Order = order;
itemToAdd.Create(); // Notice, this is not CreateAndFlush
order.Refresh();
Assert.AreEqual(originalCount + 1, order.OrderItems.Count);
}
}
このすべては、Order.OrderItems 関係マッピングの Lazy Instantiation を使い始めたときに思いつき、テストの周りに using(new SessionScope) ブロックを追加する必要がありました。
何か案は?