Можно ли использовать PersistenceSpecification и CheckList для модульного тестирования отношения Inverse HasMany? - PullRequest
1 голос
/ 12 января 2011

Это на самом деле мой самый первый вопрос о Stackoverflow. Я надеюсь, что это не последнее, и я надеюсь, что сам внесу некоторые ответы.

Мой вопрос прост. Я застрял с тестом NUnit, где я тестирую обратное отношение HasMany. Каждый раз, когда я отлаживаю его, вывод «Фактическое количество не равно ожидаемому числу ...». Я провел обширные исследования в сети по этому вопросу, и некоторые люди утверждают, что невозможно провести такой юнит-тест.

Вот мой пример. Код для 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();

Я хотел бы заменить атрибут Nullable () на Not.Nullable () для свойства References EmployeeAtPosition.

У меня есть базовый класс сущностей, который заботится о сравнении сущностей и даже переходных процессов. AddEmployeePosition () заботится о поддержании отношений в обоих направлениях для Employee.PositionHistory и EmployeePosition.EmployeeAtPosition.

Когда я смотрю на Nhibernate SQL в выводе, кажется, все в порядке. Но по какой-то причине он не равен списку, который я подготовил (positionList)

Другие полезные факты: я использую Nhibernate 3.0 и соответствующие текущие двоичные файлы Nhibernate. Загрузил их три дня назад. Использование SQLite InMemory для проведения картографических тестов.

Я действительно ценю все хорошие новые ракурсы, которые мне могут дать ваши подсказки ...

/ С наилучшими пожеланиями BacceSR- из очень снежного Стокгольма.

Ответы [ 2 ]

4 голосов
/ 20 февраля 2011

Хм нет ответов. Лучше ответь сам: D. Ну, я нашел ответ после некоторого поиска в Google, и в настоящее время есть некоторые проблемы с методом CheckList. Вместо этого я использовал CheckComponent, и он работал нормально. Теперь «Родительский» объект вставляется перед его «Дочерними» и, следовательно, без ошибок. CheckList пытался сделать противоположное, которое не работало вообще ...

0 голосов
/ 19 сентября 2011

Я также получил эту проблему этой ночью и только что провел около двух часов с этим очень странным сообщением об ошибке. Потратил много времени на проверку каждой строки кода перед поиском в Google, чтобы понять, что это не моя вина, хехехех: D.

Согласно этому посту , мы просто не можем использовать его с обратным = true. К сожалению, CheckComponentList не работает для меня, я получил ту же ошибку.

Также найдено простое объяснение об обратном ключевом слове, ИМХО, действительно плохой термин.

...