Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе показано, как использовать функцию создания из использования, которая поддерживает разработку, основанную на тестах.
Разработка на первом этапе — это подход к проектированию программного обеспечения, в котором сначала выполняется написание модульных тестов на основе спецификаций продуктов, а затем написание исходного кода, необходимого для успешного выполнения тестов. Visual Studio поддерживает тестовую разработку, создавая новые типы и элементы в исходном коде при первой ссылке на них в тестовых случаях, прежде чем они определены.
Visual Studio создает новые типы и члены с минимальным прерыванием рабочего процесса. Заглушки можно создавать для типов, методов, свойств, полей или конструкторов, не покидая текущего места в коде. При открытии диалогового окна для указания параметров создания типов фокус возвращается немедленно в текущий открытый файл при закрытии диалогового окна.
Функцию создания из использования можно использовать с платформами тестирования, которые интегрируются с Visual Studio. В этом разделе демонстрируется платформа Microsoft Unit Testing Framework.
Замечание
Инструкции в этой статье иллюстрируют последнюю версию интерактивного интерфейса разработки (IDE), доступную в Visual Studio. На компьютере могут отображаться различные имена или расположения для некоторых элементов пользовательского интерфейса. Вы можете использовать другую версию Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки.
Создание проекта библиотеки классов Windows и тестового проекта
В C# или Visual Basic создайте проект библиотеки классов Windows . Назовите его
GFUDemo_VB
илиGFUDemo_CS
в зависимости от того, какой язык вы используете.В обозревателе решений щелкните правой кнопкой мыши значок решения вверху, выберите "Добавить>новый проект".
Создайте новый проект модульного теста (.NET Framework).
Добавление ссылки на проект библиотеки классов
В обозревателе решений в проекте модульного теста щелкните правой кнопкой мыши запись "Ссылки" и выберите "Добавить ссылку".
В диалоговом окне "Диспетчер ссылок" выберите "Проекты " и выберите проект библиотеки классов.
Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно диспетчера ссылок .
Сохраните решение. Теперь вы готовы приступить к написанию тестов.
Создание нового класса из модульного теста
Тестовый проект содержит файл с именем UnitTest1. Дважды щелкните этот файл в обозревателе решений , чтобы открыть его в редакторе кода. Был создан тестовый класс и метод тестирования.
Найдите объявление для класса
UnitTest1
и переименуйте его вAutomobileTest
.Замечание
IntelliSense теперь предоставляет два варианта завершения инструкции IntelliSense: режим завершения и режим предложения. Используйте режим предложения для ситуаций, в которых классы и члены используются перед их определением. При открытии окна IntelliSense можно нажать клавиши CTRL+ALT+ПРОБЕЛ, чтобы переключаться между режимом завершения и режимом предложения. Дополнительные сведения см. в разделе "Использование IntelliSense ". Режим предложения поможет при вводе
Automobile
на следующем шаге.Найдите метод
TestMethod1()
и переименуйте его вDefaultAutomobileIsInitializedCorrectly()
. В этом методе создайте новый экземпляр класса с именемAutomobile
, как показано на следующих снимках экрана. Появится фигурное подчеркивание, указывающее на ошибку во время компиляции, а лампочка " Быстрые действия " отображается в левом поле или непосредственно под волнистой линией при наведении указателя мыши на него.Выберите или щелкните лампочку быстрых действий . Появится сообщение об ошибке, которое указывает, что тип
Automobile
не определен. Вам также предлагаются некоторые решения.Нажмите кнопку "Создать новый тип" , чтобы открыть диалоговое окно "Создать тип". Это диалоговое окно предоставляет параметры, включающие создание типа в другом проекте.
В списке проектов щелкните GFUDemo_VB или GFUDemo_CS , чтобы указать Visual Studio добавить файл в проект библиотеки классов вместо тестового проекта. Если он еще не выбран, нажмите кнопку "Создать файл " и назовите его Automobile.cs или Automobile.vb.
Нажмите кнопку "ОК ", чтобы закрыть диалоговое окно и создать новый файл.
В обозревателе решений просмотрите узел проекта GFUDemo_VB или GFUDemo_CS , чтобы убедиться в наличии нового Automobile.vb или Automobile.cs файла. В редакторе кода фокус по-прежнему находится в
AutomobileTest.DefaultAutomobileIsInitializedCorrectly
, что позволяет продолжать писать тест с минимальным прерыванием.
Создайте заглушку свойства
Предположим, что спецификация продукта указывает, что Automobile
класс имеет два открытых свойства с именем Model
и TopSpeed
. Эти свойства должны быть инициализированы значениями по умолчанию "Not specified"
и -1
с помощью конструктора по умолчанию. Следующий модульный тест проверяет, что конструктор по умолчанию задает свойства правильным значениям по умолчанию.
Добавьте следующую строку кода в
DefaultAutomobileIsInitializedCorrectly
метод теста.Поскольку код ссылается на два неопределенных свойства
Automobile
, волнистое подчеркивание отображается подModel
иTopSpeed
. Наведите указатель мыши наModel
, затем выберите значок лампочки "Быстрые действия", а затем выберите "Создать свойство Automobile.Model".Создайте заглушку для свойства
TopSpeed
аналогичным образом.Automobile
В классе типы новых свойств правильно выводятся из контекста.
Сгенерировать заглушку для нового конструктора
Теперь мы создадим метод тестирования, создающий заглушку конструктора, чтобы инициализировать свойства Model
и TopSpeed
. Позже вы добавите дополнительный код для завершения теста.
Добавьте в класс следующий дополнительный метод
AutomobileTest
тестирования.Щелкните лампочку "Быстрые действия" под красным волнистым элементом, а затем нажмите кнопку "Создать конструктор" в разделе "Автомобиль".
Automobile
В файле класса обратите внимание, что новый конструктор изучил имена локальных переменных, используемых в вызове конструктора, обнаружил свойства, имеющие те же имена в классе, и предоставил код вAutomobile
тексте конструктора для хранения значений аргументов вModel
свойствах иTopSpeed
свойствах.После создания нового конструктора под вызовом конструктора по умолчанию в
DefaultAutomobileIsInitializedCorrectly
появится волнистое подчеркивание. Сообщение об ошибке указывает, чтоAutomobile
у класса нет конструктора, который принимает нулевые аргументы. Чтобы создать явный конструктор по умолчанию, который не имеет параметров, щелкните лампочку "Быстрые действия" и нажмите кнопку "Создать конструктор" в разделе "Автомобиль".
Создание заглушки для метода
Предположим, что спецификация указывает, что новое Automobile
может быть помещено в IsRunning
состояние, если его Model
свойства TopSpeed
имеют значение, отличное от значений по умолчанию.
Добавьте в метод следующие строки
AutomobileWithModelNameCanStart
.Щелкните на лампочке ошибки "Быстрые действия" для вызова метода
myAuto.Start
, а затем щелкните Сгенерировать метод 'Automobile.Start'.Щелкните на лампочке Быстрые действия для
IsRunning
свойства, затем щелкните Создать свойство 'Automobile.IsRunning'.Теперь
Automobile
класс содержит метод с именемStart()
и свойством с именемIsRunning
.
Выполнение тестов
В меню "Тест" выберите "Выполнить>все тесты".
Команда "Выполнить> все тесты" выполняет все тесты в любых платформах тестирования, написанных для текущего решения. В этом случае есть два теста, и оба они завершаются ошибкой, как ожидалось. Тест
DefaultAutomobileIsInitializedCorrectly
проваливается, потому что условиеAssert.IsTrue
возвращаетFalse
. ТестAutomobileWithModelNameCanStart
завершается ошибкой, так какStart
метод вAutomobile
классе создает исключение.Окно результатов теста отображается на следующем рисунке.
В окне "Результаты теста " дважды щелкните каждую строку результатов теста, чтобы перейти к расположению каждого теста.
Реализация исходного кода
Добавьте следующий код в конструктор по умолчанию, чтобы свойства
Model
,TopSpeed
иIsRunning
были инициализированы их правильными значениями по умолчанию:"Not specified"
,-1
иFalse
(илиfalse
для C#).Start
При вызове метода флагIsRunning
должен быть установлен в значение true только в том случае, если для свойствModel
илиTopSpeed
задано значение, отличающееся от значения по умолчанию. Удалите тело методаNotImplementedException
и добавьте следующий код.
Снова запустите тесты
В меню "Тест" подведите курсор к "Запуск" и нажмите "Все тесты".
На этот раз тесты проходят. Окно результатов теста отображается на следующем рисунке.