Стратегия модульного тестирования - проверка состояния частного поля - PullRequest
1 голос
/ 19 ноября 2010

У меня есть служба Windows, которая получает сообщения от сторонней службы

Каждый раз, когда она получает сообщение, она обновляет запись в памяти (хранится в List<MyObj>) и периодически транслирует их

Я хотел бы проверить состояние списка

Опции, с которыми я столкнулся:

  1. Изменить видимость списка с частного на защищенный.Затем создайте подкласс Test-Specific, который имеет открытое свойство, которое предоставляет состояние

  2. , добавьте открытое свойство в класс, который компилируется только в режиме отладки.т.е.

</p> <pre><code>#if (DEBUG) public IList<MyObj> TestProperty { get { return _myObj; } } #endif

Какое решение лучше (или наименее плохое)?

Есть ли лучший способ?

* РЕДАКТИРОВАТЬ *

Только что нашел эту статью, которая обеспечивает полный обзор всех вариантов

http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

У вас есть два варианта:

  1. Создайте свойство internal, чтобы открыть поле, а затем предоставьте доступ через атрибут InternalsVisibleTo к вашей тестовой сборке. Таким образом, вы можете сохранить инкапсуляцию.
  2. Прямой доступ к полю через Reflection. Все известные мне тестовые среды имеют API для этого (например, PrivateObject в MSTest или Mirror в MbUnit ...).

НТН.
Thomas

2 голосов
/ 19 ноября 2010

Где это возможно, попробуйте проверить видимые результаты вашего кода.Вы говорите, что класс периодически передает список ... ну, если вы можете добавить дополнительный контроль над тем, как происходит это вещание, вы можете эффективно проверить содержимое списка, заставив его транслироваться.Это видимый результат кода, так что в идеале это то, что вы должны тестировать.

Я все для тестирования внутренних компонентов, где это имеет смысл, но в этом случае это звучит так, как будто вы, возможно, тоже немногоfar.

(Другая альтернатива - создать внутреннее свойство и использовать [InternalsVisibleTo].)

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