2016-02-14 2 views
1

Я пишу свою первую программу Windows Forms, используя C#. Он состоит из 3 классов, по одному для каждой формы. Помимо конструкторов, все методы внутри каждого класса являются частными.Должны ли модульные тесты записываться для частных методов в управляемом событиями коде?

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

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

Верно ли это? Должен ли мой код вообще не иметь модульных тестов? (Я прошу прощения, если это дубликат другого вопроса. Я посмотрел, но не смог найти ничего, что могло бы решить эту проблему.)

+0

Некоторый код, чтобы лучше понять пример, который вы используете, был бы полезен. Вообще говоря, частные методы будут по-прежнему иметь возврат или, по крайней мере, влияние на данные или состояние, которые могут быть протестированы. – Kritner

ответ

2

Действительно частные методы являются частными реализациями вашего приложения, и они не должны быть модульным тестом для них , Большую часть времени они будут называться внутренне публичными методами. Путем тестирования общедоступных методов вы проверяете эти частные методы.

Ваши личные методы управляются событиями, как вы сказали, которые будут выполняться, когда пользователь нажимает кнопку и т. Д. Если вы считаете, что обработчики событий содержат много логики, которые должны быть протестированы, я рекомендую следовать этому Этапы:

  1. Отметьте все классы (формы), которые содержат обработчики событий, с модификатором internal. С помощью этого модификатора эти классы доступны только в той же сборке, на которой они определены.
  2. Вам необходимо также отметить все методы обработчиков событий с помощью модификатора public. Поскольку классы на шаге 1 являются internal, эти методы видны только для сборки, где они определены, а затем только в вашем проекте Windows Forms.
  3. в AssemblyInfo.cs файл из ваших Windows Forms проектируют добавить этот атрибут: [assembly: InternalsVisibleTo("MyTestAssemblyName")] где MyTestAssemblyName это имя сборки вашего тестового проекта.
  4. Выполняя шаг 3. все ваши внутренние классы, поэтому обработчики событий также видны вашему тестовому проекту. На этом шаге и ссылаясь на ваш проект Windows Formsq на ваш тестовый проект, вы можете модульно протестировать обработчики событий, как вы будете делать с каждым методом.
Смежные вопросы