В простых тестах я могу утверждать, сохранился ли объект, если его идентификатор больше не соответствует значению по умолчанию. Но удалите объект и захотите проверить, действительно ли объект и, возможно, его потомки не находятся в базе данных, идентификаторы объекта будут по-прежнему иметь свои сохраненные значения.
Так что мне нужно перейти к БД, и я хотел бы, чтобы вспомогательное утверждение сделало тесты более читабельными, и именно здесь возникает вопрос. Мне нравится идея использовать Load для сохранения вызова БД, но я Мне интересно, могут ли следующие исключения повредить сеанс.
Ниже показано, как будут выглядеть два утверждения. Что бы вы использовали?
Приветствия
Berryl
Получить
public static void AssertIsTransient<T>(this T instance, ISession session)
where T : Entity
{
if (instance.IsTransient()) return;
var found = session.Get<T>(instance.Id);
if (found != null) Assert.Fail(string.Format("{0} has persistent id '{1}'", instance, instance.Id));
}
Load
public static void AssertIsTransient<T>(this T instance, ISession session)
where T : Entity
{
if (instance.IsTransient()) return;
try
{
var found = session.Load<T>(instance.Id);
if (found != null) Assert.Fail(string.Format("{0} has persistent id '{1}'", instance, instance.Id));
}
catch (GenericADOException)
{
// nothing
}
catch (ObjectNotFoundException)
{
// nothing
}
}
редактировать
В любом случае я буду делать выборку (Get или Load) в новом сеансе, свободном от состояния из сеанса, который выполнял сохранение или удаление.
Я пытаюсь протестировать каскадное поведение, а НЕ проверять способность NHib удалять вещи, но, возможно, я слишком много думаю об этом или есть более простой способ, о котором я не задумывался.