Модульное тестирование атрибутов свойств в классах POCO - PullRequest
0 голосов
/ 03 августа 2011

Я разрабатываю постоянный веб-сайт NHibernate, и поэтому использую классы типа POCO.Я хочу принять подход, основанный на модульном тестировании, чтобы улучшить свои методы и натолкнулся на то, что я считаю большой проблемой.

У меня есть два связанных класса ... EvaluationSession (представляющий, возможно, учебный год) и EvaluationWindow(представляет условия учебного года).Здесь есть привязка NHibernate-один-ко-многим, и сопоставление NHibernate легко достигнуть, на нем столько документации .

Вот упрощенная схема:

class diagram

Окно 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, и это заставляет мою голову болеть, но я стремлюсь записать некоторые лучшие практики.Любые хорошие указания по этому вопросу будут серьезно оценены:)

...