Как правильно реализовать методы NUnit 2.5 Constraint.Write * ()? - PullRequest
2 голосов
/ 09 июля 2009

Я планирую реализовать свой собственный набор ограничений, и мне трудно понять, как реализовать следующие методы класса Constraint.

public abstract class Constraint
{
    public abstract void WriteDescriptionTo( MessageWriter writer );
    public virtual void WriteMessageTo( MessageWriter writer );
    public virtual void WriteActualValueTo( MessageWriter writer );
}

Документация предлагает прочитать исходный код, чтобы получить хорошее представление о том, как их использовать, но я изучил множество ограничений и не видел большого отклонения от их реализации - обычно WriteDescriptionTo() является единственным реализованным методом.

Из моих наблюдений:

  • WriteMessageTo() вызывается для записи сообщения об ошибке утверждения в консоль
  • WriteActualValueTo() форматирует значение фактического параметра, заданного в ограничении, для записи в консоль

Однако я не понимаю цели WriteDescriptionTo() и не понимаю, почему она абстрактна - особенно когда достаточно переопределения WriteMessageTo().

1 Ответ

2 голосов
/ 09 июля 2009

При просмотре исходного кода метод WriteDescriptionTo используется для записи ожидаемого значения ограничения при сбое. Общий двухстрочный вид используется для отображения неудачных ограничений; первая строка, содержащая ожидаемое значение, а вторая строка, содержащая фактическое значение.

WriteDescriptionTo является абстрактным для наложения ограничений на его реализацию. Метод WriteActualValueTo используется для записи фактического значения. Это реализовано в базовом Constraint классе и помечено как виртуальное. По умолчанию он просто выводит необработанное фактическое значение, но, будучи виртуальным, это означает, что каждое унаследованное ограничение может переопределить его и при необходимости сделать что-то более конкретное.

...