Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом разделе показано, как использовать функцию создания из использования, которая поддерживает разработку, основанную на тестах.
Разработка на первом этапе — это подход к проектированию программного обеспечения, в котором сначала выполняется написание модульных тестов на основе спецификаций продуктов, а затем написание исходного кода, необходимого для успешного выполнения тестов. 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и добавьте следующий код.
Снова запустите тесты
В меню "Тест" подведите курсор к "Запуск" и нажмите "Все тесты".
На этот раз тесты проходят. Окно результатов теста отображается на следующем рисунке.