Я разрабатываю постоянный веб-сайт NHibernate, и поэтому использую классы типа POCO.Я хочу принять подход, основанный на модульном тестировании, чтобы улучшить свои методы и натолкнулся на то, что я считаю большой проблемой.
У меня есть два связанных класса ... EvaluationSession (представляющий, возможно, учебный год) и EvaluationWindow(представляет условия учебного года).Здесь есть привязка NHibernate-один-ко-многим, и сопоставление NHibernate легко достигнуть, на нем столько документации .
Вот упрощенная схема:
Окно EvaluationWindow выглядит следующим образом:
Public Class EvaluationWindow
Private _dateFinish As DateTime
Private _dateStart As DateTime
Private _evaluationSession As EvaluationSession
<EvaluationWindowFinishDate()> _
Public Overridable Property DateFinish() As DateTime
Get
Return _dateFinish
End Get
Set(ByVal value As DateTime)
_dateFinish = value
End Set
End Property
<EvaluationWindowStartDate()> _
Public Overridable Property DateStart() As DateTime
Get
Return _dateStart
End Get
Set(ByVal value As DateTime)
_dateStart = value
End Set
End Property
Public Overridable ReadOnly Property EvaluationSession() As EvaluationSession
Get
Return _evaluationSession
End Get
End Property
End Class
Я создал пользовательский атрибут проверки для EvaluationWindow DateStart и DateFinish.EvaluationWindow.DateStart и EvaluationWindow.DateFinish не должны выходить за пределы содержащейся EvaluationSession.
Таким образом, валидатор делает что-то вроде этого:
If EvaluationWindow.DateStart >= EvaluationWindow.EvaluationSession.DateStart And
EvaluationWindow.DateStart <= EvaluationWindow.EvaluationSession.DateFinish Then
Проблема заключается в том, что свойство EvaluationWindow.EvaluationSession всегда имеет значение null при работе с объектами домена, когда нет доступа к данным.EvaluationWindow.EvaluationSession никогда не создается для успешного выполнения этого теста:
<TestMethod()> Public Sub ValidateEvaluationWindowStartDate()
' Test evaluation window start date validation
Dim TheValidator As New Validator
Dim EvalWindow As EvaluationWindow
Dim EvalSession As EvaluationSession
' Check a valid date assignment is validated correctly .
EvalSession = New EvaluationSession
EvalSession.DateStart = CDate("01/01/2011")
EvalSession.DateFinish = CDate("31/12/2011")
EvalWindow = New EvaluationWindow()
EvalWindow.DateStart = CDate("02/01/2011")
EvalWindow.DateFinish = CDate("30/12/2011")
EvalSession.EvaluationWindows.Add(EvalWindow)
Assert.IsTrue(TheValidator.IsValid(EvalSession.EvaluationWindows(0)),
"Evaluation window start date was within the date range of it's " & _
"containing evaluation session, yet failed validation.")
End Sub
Насколько я знаю, я не могу добавить конструктор в EvaluationWindow, который принимает экземпляр EvaluationSession в качестве аргумента, потому что это 'Это вызовет проблемы с NHib, но я хочу протестировать эти атрибуты проверки на уровне домена, потому что я прочитал и согласен, что имеет смысл поместить бизнес-правила в домен.
Я относительно новичок вNHib / OOP, и это заставляет мою голову болеть, но я стремлюсь записать некоторые лучшие практики.Любые хорошие указания по этому вопросу будут серьезно оценены:)