Вопрос

Где вы размещаете модульные тесты для частных функций в классах C#?

Ан статья в Википедии предлагает:

  • Размещение тестов в том же классе, что и тестируемые члены.
  • Использование частичных классов

Лично мне ни один из этих методов не кажется подходящим, и я предпочитаю, чтобы модульные тесты вообще размещались в отдельном проекте.

Есть мысли по этому поводу?

(Я знаю, что ведется немало споров о том, следует ли вообще тестировать частные методы.Хотелось бы услышать обе стороны спора.)

Это было полезно?

Решение

Частные методы не обязательно должны тестироваться напрямую.Вы можете определить их достоверность на основе тестов общедоступных методов, использующих эти частные методы.

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

Редактировать: Что касается того, где должны располагаться другие ваши тесты, я предлагаю отдельный подкаталог в вашем проекте для хранения ваших тестов.При написании тестов для PHP-приложений у меня возникает тесты каталог в корне моего проекта, структура каталогов которого идентична структуре каталогов моего реального приложения.В нем у меня есть тестовый класс для каждого реального класса.

Просто не компилируйте тестовые классы с остальной частью проекта при выпуске в рабочую среду (или, в случае интерпретируемого языка, такого как PHP, не развертывайте тестовые классы на рабочем веб-сервере).

Другие советы

Не выполняйте модульное тестирование частных методов.Модульные тесты предназначены для тестирования видимого (публичного и защищенного) интерфейса класса.Частные методы представляют собой детали реализации, и писать для них модульные тесты не требуется (их поведение должно неявно проверяться тестами видимых методов), что приводит к нестабильности тестов (поскольку детали реализации могут измениться) и является препятствием для рефакторинга.

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

Где вы размещаете модульные тесты для частных функций в классах C#?

Никуда.Их не существует.

В общем, мои юнит-тесты находятся в отдельных проектах.

Лично мне также нравится иметь модульные тесты в отдельном проекте.Если вы хотите выполнить модульное тестирование частного метода, вместо этого вы можете сделать его внутренним.Затем вы можете сделать внутренние методы видимыми для ваших модульных тестов и вызывать их напрямую, добавив в AssemblyInfo.cs следующее:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Вы должны делать то, что работает для вас;вот что работает для меня:

Мой единица - это класс:это то, что я пытаюсь проверить.Не метод.Я пытаюсь заниматься объектно-ориентированным программированием, поэтому мое внимание сосредоточено на объектах.

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

Мои занятия, как правило, довольно маленький.Их легко читать и понимать.Мои методы, конечно, тоже очень маленькие и простые для понимания.

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

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

При этом есть причины, по которым вы можете захотеть протестировать частные методы:

  1. Вы используете TDD и вам нужно разработать сложный частный метод.Создание тестовых методов для частного метода может потребоваться для обеспечения правильной детализации цикла записи теста-записи кода-теста.

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

Некоторые решения:

  1. Объявите некоторые методы, которые являются общедоступными, делегируют их частному методу и используются только в целях тестирования.Они могут иметь префикс, например.с TestFoo1, TestFoo2 и т. д.

  2. Используйте внутренний

http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx

Название вашего вопроса и первое предложение отличаются.:)

Я не уверен, где разместить ваши тесты.Это будет зависеть от языка, и C # - это не то, с чем я знаком, но я полагаю, что значительная часть вашего кода находится внутри частных методов.Я бы чувствовал себя некомфортно, если бы это не было проверено.Покрытие кода значительно упадет.

Мы используем частные методы доступа в Visual Studio для тестирования частных методов.Это означает, что тестовые классы могут находиться в отдельном проекте.

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

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

Абсолютно да.частные методы должны быть протестированы в любом случае.и мбунит Платформа модульного тестирования может получить доступ к частному члену.

см. этот блог:тестирование частных методов

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top