- Настройка параметров форм или теста в Microsoft Forms
- Настройка параметров форм и тестов
- Параметр для теста
- Кто может заполнять эту форму
- Варианты ответов
- Уведомление
- Классификация
- Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода Walkthrough: Create and run unit tests for managed code
- Создайте проект для тестирования Create a project to test
- Создание проекта модульного теста Create a unit test project
- Создание тестового класса Create the test class
- Переименуйте файл и класс Rename a file and class
- Добавьте оператор using Add a using statement
- Требования к тестовому классу Test class requirements
- Создание первого тестового метода Create the first test method
- Создание метода теста To create a test method
- Требования к методу теста Test method requirements
- Сборка и запуск теста Build and run the test
- Исправление кода и повторный запуск тестов Fix your code and rerun your tests
- Исправление ошибки Correct the bug
- Повторный запуск теста Rerun the test
- Использование модульных тестов для улучшения кода Use unit tests to improve your code
- Анализ проблем Analyze the issues
- Создание и запуск новых методов теста Create and run new test methods
- Продолжение анализа Continue the analysis
- Рефакторинг тестируемого кода Refactor the code under test
- Рефакторинг тестовых методов Refactor the test methods
- Повторное тестирование, переписывание и анализ Retest, rewrite, and reanalyze
- Заключение Conclusion
Настройка параметров форм или теста в Microsoft Forms
Совет: Узнайте больше о Microsoft Forms или сразу приступите к работе и создайте опрос или тест. Хотите использовать более сложные элементы фирменной символики, типы вопросов и анализ данных? Попробуйте Dynamics 365 Customer Voice.
С Microsoft Forms вы можете создать форму (например, опрос или опрос) или тест (например, экзамен по математике для учащихся). С помощью параметров формы и теста можно устанавливать крайние сроки, определять пользователей, отвечающих на вопросы формы, отображать правильные ответы на тесты и устанавливать другие параметры Microsoft Forms.
В Microsoft Formsоткройте форму, параметры которой вы хотите изменить, и выберите «Дополнительные параметры формы» > параметры.
Настройка параметров форм и тестов
В области «Параметры» можно выбрать или очистить параметры.
Примечание: Параметры теста доступны только для тестов.
Параметр для теста
Параметр по умолчанию «Показывать результаты автоматически»позволяет пользователям, которые отвечают на вопросы, видеть результаты по каждому вопросу при отправке ответов на тест. Рядом с правильными ответами на вопросы теста будет показана зеленая галочка, а рядом с неправильными — сообщение красного цвета. Если вы не хотите, чтобы рядом с каждым вопросом теста отображалась информация о правильном или неправильном ответе, снимите этот флажок.
Примечание: Параметры теста доступны только для тестов.
Кто может заполнять эту форму
Ответить может любой человек: любой человек из вашей организации или за ее пределами может отправлять ответы на форму или тест.
Отвечать могут только люди из моей организации. Отвечать на форму или тест могут только люди из вашей организации.
Record name — Keep track of people that have responded to your form or quiz.
Один ответ на каждого человека: только один ответ на форму или тест. Это предотвращает многократное заполнение формы или теста отдельными людьми.
Могут отвечать определенные люди в организации. Отвечать на вашу форму могут только люди или группы в вашей организации, которые вы указали.
Отвечать могут только люди из моей организации, а варианты ответов доступны только пользователям Office 365 для образования и Приложений Microsoft 365 для бизнеса. Во sign in with your work or school account to access these settings.
Определенные люди в моей организации могут отвечать только отдельным людям и группам. Можно узначить до 100 отдельных имен или имен групп. Из 100 ограничений можно назначить до 20 групп (каждая группа может содержать до 1000 пользователей). Например, можно собрать ответы от 80 пользователей и 20 групп на общую сумму 100 человек.
Варианты ответов
Принятие ответов. Если этот параметр не заблокировали, вы отключите возможность сбора дополнительных ответов на форму. Вы также можете изменить сообщение по умолчанию, которое отображается респонденту, когда он пытается отправить ответ после отключения этого параметра.
Дата начала и окончания— вы можете указать точные дату и время начала и окончания сбора ответов на форму. Нажмите кнопку «Дата начала»,а затем щелкните текстовое поле даты и выберите дату в календаре. Выберите время из раскрывающегося списка (значения в нем указаны с шагом в один час). Сделайте то же самое для даты окончания
Примечание: Выбрать дату и время из прошлого нельзя.
Вопросы в случайном порядке: если этот параметр не устанавливался (значение по умолчанию), вопросы отображаются для респондентов в том же порядке, в который вы их создали. Если этот параметр выбран, порядок отображения вопросов будет случайным. Каждый респондент видит вопросы в разных последовательности.
Для всех вопросов в случайном порядке упорядочение всех вопросов в форме или тесте.
Блокировка вопросов. Случайно упорядочение всех вопросов, кроме задавных (например, вопросы 3–5).
Примечание: Если форма или тест имеют несколько разделов или страниц, вы не сможете в случайном порядке задавать вопросы.
Индикатор выполнения — респонденты будут видеть визуальный индикатор своих успехов при заполнении формы или теста.
Примечание: Она доступна только для форм и тестов, которые содержат несколько разделов или страниц.
Настройте сообщение с благодарностей. По завершении работы с формой или тестом отобразите благодарность. Щелкните текстовое поле, чтобы создать настроенное сообщение.
Уведомление
Разрешить получение ответов после отправки. После заполнения формы респонденты смогут сохранить или распечатать PDF-файл формы со своими заполненными ответами на странице «Спасибо». Обратите внимание, что при выборе этого параметра респондентам из вашей организации по-прежнему разрешается отправлять уведомления об их формах по электронной почте.
Примечание: Эта функция в настоящее время развертывается и будет доступна в ближайшее время.
По электронной почте вы можете получать уведомления о каждом ответе по электронной почте при каждой отправке ответа.
Классификация
Выберите «Изменить»,а затем выберите «Общие», «Конфиденциально» или «Строго конфиденциально», чтобы контролировать уровень защиты данных.
Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода Walkthrough: Create and run unit tests for managed code
В этой статье приводится подробное описание процесса создания, запуска и настройки набора модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов Visual Studio. This article steps you through creating, running, and customizing a series of unit tests using the Microsoft unit test framework for managed code and Visual Studio Test Explorer. В руководстве производится создание проекта C#, находящегося в стадии разработки, создание тестов для проверки его кода, запуск тестов и изучение результатов. You start with a C# project that is under development, create tests that exercise its code, run the tests, and examine the results. После этого производится изменение кода проекта и повторный запуск тестов. Then you change the project code and rerun the tests.
Создайте проект для тестирования Create a project to test
Запустите Visual Studio. Open Visual Studio.
В меню Файл выберите Создать > Проект. On the File menu, select New > Project.
Откроется диалоговое окно Новый проект . The New Project dialog box appears.
В разделе Visual C# > .NET Core выберите шаблон проекта Консольное приложение (.NET Core) . Under the Visual C# > .NET Core category, choose the Console App (.NET Core) project template.
Присвойте проекту имя Bank и нажмите кнопку ОК. Name the project Bank, and then click OK.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода. The Bank project is created and displayed in Solution Explorer with the Program.cs file open in the code editor.
Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его. If Program.cs is not open in the editor, double-click the file Program.cs in Solution Explorer to open it.
Запустите Visual Studio. Open Visual Studio.
На начальном экране выберите Создать проект. On the start window, choose Create a new project.
Найдите и выберите шаблон проекта Консольное приложение на C#для .NET Core и щелкните Далее. Search for and select the C# Console App project template for .NET Core, and then click Next.
Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. If you do not see the Console App template, you can install it from the Create a new project window. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. In the Not finding what you’re looking for? message, choose the Install more tools and features link. После этого в Visual Studio Installer выберите рабочую нагрузку Кроссплатформенная разработка .NET Core. Then, in the Visual Studio Installer, choose the .NET Core cross-platform development workload.
Назовите проект Bank и щелкните Далее. Name the project Bank, and then click Next.
Выберите рекомендуемую версию целевой платформы (.NET Core 3.1) или .NET 5 и щелкните Создать. Choose either the recommended target framework (.NET Core 3.1) or .NET 5, and then choose Create.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода. The Bank project is created and displayed in Solution Explorer with the Program.cs file open in the code editor.
Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его. If Program.cs is not open in the editor, double-click the file Program.cs in Solution Explorer to open it.
Замените содержимое файла Program.cs следующими кодом на C#, который определяет класс BankAccount: Replace the contents of Program.cs with the following C# code that defines a class, BankAccount:
Переименуйте файл в BankAccount.cs, щелкнув его правой кнопкой мыши и выбрав команду Переименовать в обозревателе решений. Rename the file to BankAccount.cs by right-clicking and choosing Rename in Solution Explorer.
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B). On the Build menu, click Build Solution (or press Ctrl + SHIFT + B).
Теперь у вас есть проект с методами, которые можно протестировать. You now have a project with methods you can test. В этой статье тестирование проводится на примере метода Debit . In this article, the tests focus on the Debit method. Метод Debit вызывается, когда денежные средства снимаются со счета. The Debit method is called when money is withdrawn from an account.
Создание проекта модульного теста Create a unit test project
В меню Файл выберите Добавить > Создать проект. On the File menu, select Add > New Project.
В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты Добавить > Создать проект. You can also right-click on the solution in Solution Explorer and choose Add > New Project.
В диалоговом окне Новый проект разверните узлы Установленные и Visual C# и выберите Тест. In the New Project dialog box, expand Installed, expand Visual C#, and then choose Test.
В списке шаблонов выберите Тестовый проект MSTest (.NET Core) . From the list of templates, select MSTest Test Project (.NET Core).
В поле Имя введите BankTests , а затем нажмите кнопку ОК. In the Name box, enter BankTests , and then select OK.
Проект BankTests добавляется в решение Банк. The BankTests project is added to the Bank solution.
Введите модульный тест в поле поиска, выберите C# в качестве языка, выберите Проект модульного теста на C# для шаблона .NET Core и щелкните Далее. Type unit test in the search box, select C# as the language, and then select the C# Unit Test Project for .NET Core template, and then click Next.
Начиная с Visual Studio 2019 версии 16.9, имя шаблона проекта MSTest изменено с Проект модульного теста MSTest (.NET Core) на Проект модульного теста. Starting in Visual Studio 2019 version 16.9, the MSTest project template name changed from MSTest Unit Test Project (.NET Core) to Unit Test Project.
Назовите проект BankTests и щелкните Далее. Name the project BankTests and click Next.
Выберите рекомендуемую версию целевой платформы (.NET Core 3.1) или .NET 5 и щелкните Создать. Choose either the recommended target framework (.NET Core 3.1) or .NET 5, and then choose Create.
Проект BankTests добавляется в решение Банк. The BankTests project is added to the Bank solution.
В проекте BankTests добавьте ссылку на проект Банк. In the BankTests project, add a reference to the Bank project.
В обозревателе решений щелкните Зависимости в проекте BankTests, а затем выберите в контекстном меню Добавить ссылку. In Solution Explorer, select Dependencies under the BankTests project and then choose Add Reference from the right-click menu.
В диалоговом окне Диспетчер ссылок разверните Проекты, выберите Решение и выберите элемент Банк. In the Reference Manager dialog box, expand Projects, select Solution, and then check the Bank item.
Нажмите кнопку ОК. Choose OK.
Создание тестового класса Create the test class
Создание тестового класса, чтобы проверить класс BankAccount . Create a test class to verify the BankAccount class. Можно использовать UnitTest1.cs, созданный в шаблоне проекта, но лучше дать файлу и классу более описательные имена. You can use the UnitTest1.cs file that was generated by the project template, but give the file and class more descriptive names.
Переименуйте файл и класс Rename a file and class
- Чтобы переименовать файл, в обозревателе решений выберите файл UnitTest1.cs в проекте BankTests. To rename the file, in Solution Explorer, select the UnitTest1.cs file in the BankTests project. В контекстном меню выберите команду Переименовать (или нажмите клавишу F2), а затем переименуйте файл в BankAccountTests.cs. From the right-click menu, choose Rename (or press F2), and then rename the file to BankAccountTests.cs.
- Чтобы переименовать класс, выберите Да в открывшемся диалоговом окне, предлагающем также переименовать ссылки на элемент кода. To rename the class, choose Yes in the dialog box that pops up and asks whether you want to also rename references to the code element.
- Чтобы переименовать класс, поместите курсор в UnitTest1 в редакторе кода, щелкните правой кнопкой мыши и выберите команду Переименовать (или нажмите клавиши F2). To rename the class, position the cursor on UnitTest1 in the code editor, right-click, and then choose Rename (or press F2). Введите название BankAccountTests и нажмите клавишу ВВОД. Type in BankAccountTests and then press Enter.
Файл BankAccountTests.cs теперь содержит следующий код: The BankAccountTests.cs file now contains the following code:
Добавьте оператор using Add a using statement
Можно также добавить оператор using в класс, чтобы тестируемый проект можно было вызывать без использования полных имен. Add a using statement to the test class to be able to call into the project under test without using fully qualified names. Вверху файла класса добавьте: At the top of the class file, add:
Требования к тестовому классу Test class requirements
Минимальные требования к тестовому классу следующие: The minimum requirements for a test class are:
Атрибут [TestClass] является обязательным в любом классе, содержащем методы модульных тестов, которые необходимо выполнить в обозревателе тестов. The [TestClass] attribute is required on any class that contains unit test methods that you want to run in Test Explorer.
Каждый метод теста, предназначенный для запуска в обозревателе тестов, должен иметь атрибут [TestMethod] . Each test method that you want Test Explorer to recognize must have the [TestMethod] attribute.
Можно иметь другие классы в проекте модульного теста, которые не содержат атрибута [TestClass] , а также иметь другие методы в тестовых классах, у которых атрибут — [TestMethod] . You can have other classes in a unit test project that do not have the [TestClass] attribute, and you can have other methods in test classes that do not have the [TestMethod] attribute. Можно вызывать эти другие классы и методы в методах теста. You can call these other classes and methods from your test methods.
Создание первого тестового метода Create the first test method
В этой процедуре мы напишем методы модульного теста для проверки поведения метода Debit класса BankAccount . In this procedure, you’ll write unit test methods to verify the behavior of the Debit method of the BankAccount class.
Существует по крайней мере три поведения, которые требуется проверить: There are at least three behaviors that need to be checked:
Метод создает исключение ArgumentOutOfRangeException , если сумма по дебету превышает баланс. The method throws an ArgumentOutOfRangeException if the debit amount is greater than the balance.
Метод создает исключение ArgumentOutOfRangeException, если сумма по дебету меньше нуля. The method throws an ArgumentOutOfRangeException if the debit amount is less than zero.
Если значение дебета допустимо, то метод вычитает сумму дебета из баланса счета. If the debit amount is valid, the method subtracts the debit amount from the account balance.
Метод по умолчанию TestMethod1 можно удалять, так как он не используется в этом руководстве. You can delete the default TestMethod1 method, because you won’t use it in this walkthrough.
Создание метода теста To create a test method
Первый тест проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). The first test verifies that a valid amount (that is, one that is less than the account balance and greater than zero) withdraws the correct amount from the account. Добавьте следующий метод в этот класс BankAccountTests : Add the following method to that BankAccountTests class:
Метод очень прост: он создает новый объект BankAccount с начальным балансом, а затем снимает допустимое значение. The method is straightforward: it sets up a new BankAccount object with a beginning balance and then withdraws a valid amount. Он использует метод Assert.AreEqual, чтобы проверить, что конечный баланс соответствует ожидаемому. It uses the Assert.AreEqual method to verify that the ending balance is as expected.
Требования к методу теста Test method requirements
Метод теста должен удовлетворять следующим требованиям: A test method must meet the following requirements:
Он декорируется атрибутом [TestMethod] . It’s decorated with the [TestMethod] attribute.
Он возвращает void . It returns void .
Он не должен иметь параметров. It cannot have parameters.
Сборка и запуск теста Build and run the test
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B). On the Build menu, choose Build Solution (or press Ctrl + SHIFT + B).
Откройте Обозреватель тестов, выбрав Тест > Windows > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T). If Test Explorer is not open, open it by choosing Test > Windows > Test Explorer from the top menu bar (or press Ctrl + E, T).
Выберите Запустить все, чтобы выполнить тест (или нажмите клавиши CTRL + R, V). Choose Run All to run the test (or press Ctrl + R, V).
Во время выполнения теста в верхней части окна Обозреватель тестов отображается анимированная строка состояния. While the test is running, the status bar at the top of the Test Explorer window is animated. По завершении тестового запуска строка состояния становится зеленой, если все методы теста успешно пройдены, или красной, если какие-либо из тестов не пройдены. At the end of the test run, the bar turns green if all the test methods pass, or red if any of the tests fail.
В данном случае тест пройден не будет. In this case, the test fails.
Выберите этот метод в обозревателе тестов для просмотра сведений в нижней части окна. Select the method in Test Explorer to view the details at the bottom of the window.
Исправление кода и повторный запуск тестов Fix your code and rerun your tests
Результат теста содержит сообщение, описывающее возникшую ошибку. The test result contains a message that describes the failure. Для метода AreEqual выводится сообщение о том, что ожидалось и что было фактически получено. For the AreEqual method, the message displays what was expected and what was actually received. Ожидалось, что баланс уменьшится, а вместо этого он увеличился на сумму списания. You expected the balance to decrease, but instead it increased by the amount of the withdrawal.
Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться. The unit test has uncovered a bug: the amount of the withdrawal is added to the account balance when it should be subtracted.
Исправление ошибки Correct the bug
Чтобы исправить эту ошибку, в файле BankAccount.cs замените строку: To correct the error, in the BankAccount.cs file, replace the line:
Повторный запуск теста Rerun the test
В обозревателе тестов выберите Запустить все, чтобы запустить тест повторно (или нажмите клавиши CTRL + R, V). In Test Explorer, choose Run All to rerun the test (or press Ctrl + R, V). Красно-зеленая строка становится зеленой, чтобы указать, что тест был пройден. The red/green bar turns green to indicate that the test passed.
Использование модульных тестов для улучшения кода Use unit tests to improve your code
В этом разделе рассматривается, как последовательный процесс анализа, разработки модульных тестов и рефакторинга может помочь сделать рабочий код более надежным и эффективным. This section describes how an iterative process of analysis, unit test development, and refactoring can help you make your production code more robust and effective.
Анализ проблем Analyze the issues
Мы создали тестовый метод для подтверждения того, что допустимая сумма правильно вычитается в методе Debit . You’ve created a test method to confirm that a valid amount is correctly deducted in the Debit method. Теперь проверим, что метод создает исключение ArgumentOutOfRangeException, если сумма по дебету: Now, verify that the method throws an ArgumentOutOfRangeException if the debit amount is either:
- больше баланса или greater than the balance, or
- меньше нуля. less than zero.
Создание и запуск новых методов теста Create and run new test methods
Создадим метод теста для проверки правильного поведения в случае, когда сумма по дебету меньше нуля: Create a test method to verify correct behavior when the debit amount is less than zero:
Мы используем метод ThrowsException для подтверждения правильности созданного исключения. Use the ThrowsException method to assert that the correct exception has been thrown. Этот метод приводит к тому, что тест не будет пройден, если не возникнет исключения ArgumentOutOfRangeException. This method causes the test to fail unless an ArgumentOutOfRangeException is thrown. Если временно изменить тестируемый метод для вызова более общего исключения ApplicationException при значении суммы по дебету меньше нуля, то тест работает правильно — то есть завершается неудачно. If you temporarily modify the method under test to throw a more generic ApplicationException when the debit amount is less than zero, the test behaves correctly—that is, it fails.
Чтобы проверить случай, когда размер списания превышает баланс, выполните следующие действия: To test the case when the amount withdrawn is greater than the balance, do the following steps:
Создать новый метод теста с именем Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange . Create a new test method named Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange .
Скопировать тело метода из Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange в новый метод. Copy the method body from Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange to the new method.
Присвоить debitAmount значение, превышающее баланс. Set the debitAmount to a number greater than the balance.
Выполните два теста и убедитесь, что они пройдены. Running the two tests and verify that they pass.
Продолжение анализа Continue the analysis
Тестируемый метод можно дополнительно улучшить. The method being tested can be improved further. При такой реализации мы не можем знать, какое условие ( amount > m_balance или amount ) приводят к исключению, возвращаемому в ходе теста. With the current implementation, we have no way to know which condition ( amount > m_balance or amount ) led to the exception being thrown during the test. Нам просто известно, что ArgumentOutOfRangeException где-то возникает в методе. We just know that an ArgumentOutOfRangeException was thrown somewhere in the method. Было бы лучше знать, какое условие в BankAccount.Debit вызвало исключение ( amount > m_balance или amount ), чтобы быть уверенными в том, что наш метод правильно проверяет свои аргументы. It would be better if we could tell which condition in BankAccount.Debit caused the exception to be thrown ( amount > m_balance or amount ) so we can be confident that our method is sanity-checking its arguments correctly.
Еще раз проанализировав тестируемый метод BankAccount.Debit , можно заметить, что оба условных оператора используют конструктор ArgumentOutOfRangeException , который просто получает имя аргумента в качестве параметра: Look at the method being tested ( BankAccount.Debit ) again, and notice that both conditional statements use an ArgumentOutOfRangeException constructor that just takes name of the argument as a parameter:
Так выглядит конструктор, который можно использовать для сообщения более детальной информации: ArgumentOutOfRangeException(String, Object, String) включает имя аргумента, значения аргумента и определяемое пользователем сообщение. There is a constructor you can use that reports far richer information: ArgumentOutOfRangeException(String, Object, String) includes the name of the argument, the argument value, and a user-defined message. Мы можем выполнить рефакторинг тестируемого метода для использования данного конструктора. You can refactor the method under test to use this constructor. Более того, можно использовать открытые для общего доступа члены типа для указания ошибок. Even better, you can use publicly available type members to specify the errors.
Рефакторинг тестируемого кода Refactor the code under test
Сначала определим две константы для сообщений об ошибках в области видимости класса. First, define two constants for the error messages at class scope. Добавьте это в тестируемый класс ( BankAccount ): Put these in the class under test, BankAccount :
Затем изменим два условных оператора в методе Debit : Then, modify the two conditional statements in the Debit method:
Рефакторинг тестовых методов Refactor the test methods
Выполните рефакторинг методов теста, удалив вызов Assert.ThrowsException. Refactor the test methods by removing the call to Assert.ThrowsException. Заключите вызов Debit() в блок try/catch , перехватите конкретное ожидаемое исключение и проверьте соответствующее ему сообщение. Wrap the call to Debit() in a try/catch block, catch the specific exception that’s expected, and verify its associated message. Метод Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains обеспечивает возможность сравнения двух строк. The Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains method provides the ability to compare two strings.
В этом случае метод Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange может выглядеть следующим образом: Now, the Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange might look like this:
Повторное тестирование, переписывание и анализ Retest, rewrite, and reanalyze
Метод теста сейчас обрабатывает не все требуемые случаи. Currently, the test method doesn’t handle all the cases that it should. Если тестируемый метод Debit не смог выдать исключение ArgumentOutOfRangeException, когда значение debitAmount было больше остатка (или меньше нуля), метод теста выдает успешное прохождение. If the method under test, the Debit method, failed to throw an ArgumentOutOfRangeException when the debitAmount was larger than the balance (or less than zero), the test method would pass. Это нехорошо, поскольку метод теста должен был завершиться с ошибкой в том случае, если исключение не создается. This is not good, because you want the test method to fail if no exception is thrown.
Это является ошибкой в методе теста. This is a bug in the test method. Для решения этой проблемы добавим утверждение Fail в конце тестового метода для обработки случая, когда исключение не создается. To resolve the issue, add an Fail assert at the end of the test method to handle the case where no exception is thrown.
Однако повторный запуск теста показывает, что тест теперь оказывается непройденным при перехватывании верного исключения. Rerunning the test shows that the test now fails if the correct exception is caught. Блок catch перехватывает исключение, но метод продолжает выполняться, и в нем происходит сбой на новом утверждении Fail. The catch block catches the exception, but the method continues to execute and it fails at the new Fail assert. Чтобы разрешить эту проблему, добавим оператор return после StringAssert в блоке catch . To resolve this problem, add a return statement after the StringAssert in the catch block. Повторный запуск теста подтверждает, что проблема устранена. Rerunning the test confirms that you’ve fixed this problem. Окончательная версия метода Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange выглядит следующим образом: The final version of the Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange looks like this:
Заключение Conclusion
Усовершенствования тестового кода привели к созданию более надежных и информативных методов теста. The improvements to the test code led to more robust and informative test methods. Но что более важно, в результате был также улучшен тестируемый код. But more importantly, they also improved the code under test.
В этом пошаговом руководстве используется платформа модульных тестов Microsoft для управляемого кода. This walkthrough uses the Microsoft unit test framework for managed code. Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя, которые имеют адаптеры для обозревателя тестов. Test Explorer can also run tests from third-party unit test frameworks that have adapters for Test Explorer. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков. For more information, see Install third-party unit test frameworks.