Как мне выполнить модульное тестирование сериализации класса Exception? - PullRequest
2 голосов
/ 20 октября 2010

Каков наилучший способ модульного тестирования сериализации класса Exception, подобного следующему:

[Serializable]
public abstract class TankBaseException : Exception
{
    public TankBaseException() : base() { }

    public TankBaseException(string message) : base(message) { }

    public TankBaseException(string message, Exception innerException) : base(message, innerException) { }

    public TankBaseException(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
        this.timeStamp = info.GetDateTime(String.Format("{0}.TimeStamp", this.GetType().Name));
        this.machineName = info.GetString(String.Format("{0}.MachineName", this.GetType().Name));
    }

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);

        string typeName = this.GetType().Name;

        info.AddValue(String.Format("{0}.TimeStamp", typeName), this.timeStamp, this.timeStamp.GetType());
        info.AddValue(String.Format("{0}.MachineName", typeName), this.machineName, this.machineName.GetType());
    }

    public override string Message
    {
        get
        {
            return String.Format("{0} (Machine Name: {1}; TimeStamp: {2}",
                base.Message, this.MachineName, this.TimeStamp);
        }
    }

    private readonly string machineName = Environment.MachineName;
    public string MachineName
    {
        get { return this.machineName; }
    }

    private readonly DateTime timeStamp = DateTime.Now;
    public DateTime TimeStamp
    {
        get { return this.timeStamp; }
    }
}

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

Вопрос в том, как лучше всего тестировать сериализуемые аспекты класса таким образом, чтобы он соответствовал «столпам хороших тестов» Ошерова.- что они:

  • заслуживающие доверия
  • поддерживаемые
  • читаемые

(или любой другой набор руководящих принципов для проведения юнит-тестирования).

Или, другими словами, как я могу проверить, введя наименьшее количество смешанных переменных?

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Вы можете использовать Верификатор договора об исключении из Gallio / MbUnit .

Контроллеры контрактов - это настраиваемые встроенные тестовые наборы для хорошо известных шаблонов кода. В частности, в MbUnit есть специальный верификатор контракта для тестирования пользовательских типов исключений, который также включает тесты сериализации.

[TestFixture]
public class SampleExceptionTest
{
  [VerifyContract]
  public readonly IContract ExceptionTests = new ExceptionContract<SampleException>()
  {
    ImplementsSerialization = true,
  };
}
0 голосов
/ 20 октября 2010

Вы не можете.Это abstract класс.

Ваш единственный вариант - иметь его подкласс и модульный тест.

Мне интересно, почему это абстрактный класс? У него нет абстрактного метода или свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...