Только что понял, оказалось, что это была ошибка копирования и вставки. Хех, PEBKAC.
Я добавил 4 утверждения, которые проверяют, что объекты не находятся в сеансе:
Assert.That(Session.Contains(_beveragesCategory), Is.False);
Assert.That(Session.Contains(_beerCategory), Is.False);
Assert.That(Session.Contains(_darkBeerCategory), Is.False);
Assert.That(Session.Contains(_lightBeerCategory), Is.False);
Когда все это прошло (в первый раз, когда я их запускал), я более внимательно посмотрел на код, утверждающий, что объекты были разными, и обнаружил, что утверждения были неверными.
Был:
Assert.That(_beverageCategory.ChildCategories[0], Is.Not.SameAs(_beerCategory));
Должно было быть:
Assert.That(fromDB.ChildCategories[0], Is.Not.SameAs(_beerCategory));