Как написать модульное тестирование со свойством, которое имеет модификатор readonly? - PullRequest
0 голосов
/ 28 июля 2011

это может быть глупый вопрос

public class File
{
    public Metadata metadata
    {
        get
        {
            return _metadata;
        }
    }
    private readonly Metadata _metadata;

    #region public

    File () { ... }

    Foo () { ... }

    #endregion
}

Теперь мне интересно, нужно ли мне писать модульные тесты для проверки того, что _metadata только для чтения, и как

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Нет, вам обычно не нужно писать тесты для вещей, которые объявлены и проверены компилятором.Например, вы обычно не пишете тесты, в которых вы можете вызывать методы только правильных типов и т. Д.

Конечно, если у вас есть несколько типов, и вы хотите проверить, что все их свойства доступны только для чтения, дляНапример, это имеет смысл.(например, «каждая реализация этого интерфейса должна быть неизменной» - свойства только для чтения, по крайней мере, start , чтобы проверить это.)

0 голосов
/ 28 июля 2011

В дополнение к ответу Джона Скита, модульное тестирование должно только проверять открытый контракт класса и не проверять его внутреннюю работу (чтобы упростить рефакторинг).

Реализация здесь беспокоит меня, потому что я вижу, что контракт Метаданные файла должны быть доступны только для чтения. При условии, что метаданные имеют открытые свойства и / или открытые методы, которые изменяют свойства, можно изменить метаданные файла. путем доступа к свойству metadata и, в нарушение закона Деметры, вызова методов / изменения свойств для него.

...