Одним из решений, которое я вижу, является следующее:
Вместо использования авто-свойства,
для CreatedBy используйте «классический
свойство ', которое использует поддержку
поле, как это:
private Person _createdBy;
public Person CreatedBy
{
get { return _createdBy; }
set { _createdBy = value; }
}
В файле сопоставления укажите, что NHibernate должен использовать поле поддержки вместо свойства:
<many-to-one name="CreatedBy" class="Person" access="field.camelcase-underscore" fetch="select">
<column name="PERSON_ID" precision="10" scale="0" not-null="true" />
</many-to-one>
Затем самое прекрасное, что вы можете сделать, - это создать в вашем проекте модульного тестирования метод расширения, который проверяет, было ли инициализировано поле _createdBy.
К сожалению, вы не можете получить доступ к закрытым членам в методе расширения.
Поэтому, я думаю, вы могли бы создать внутренний метод в своем классе Project, который проверяет, было ли инициализировано поле _createdBy.
Вам также следует использовать атрибут [InternalsVisibleTo][1]
, чтобы проект, содержащий ваши юнит-тесты, мог получить доступ к внутреннему методу в вашем классе Project
.
public class Project
{
private Person _createdBy;
public Person CreatedBy
{
get{return _createdBy;}
set{ _createdBy = value; }
}
internal IsCreatedByInitialized()
{
return _createdBy != null;
}
}
В своем модульном тесте вы можете сделать это:
Assert.IsTrue (p.isCreatedByInitialized());
Обратите внимание, что если ваши юнит-тесты находятся в отдельном проекте, вам необходимо указать, что эта сборка должна иметь доступ к внутренним методам:
следовательно, в вашем файле AssemblyInfo.cs
проекта, в котором находится класс Project
, вы должны сделать следующее:
[InternalsVisibleTo ("MyTestProject")]